草庐IT

java - 基于键列表获取子 HashMap 的最佳方法是什么?

我有一个HashMap,我想得到一个新的HashMap,它只包含第一个HashMap中的元素,其中K属于特定列表。我可以查看所有键并填充一个新的HashMap,但我想知道是否有更有效的方法来做到这一点?谢谢 最佳答案 有了Java8流,就有了一个功能性(优雅)的解决方案。如果keys是要保留的键列表,map是源Map。keys.stream().filter(map::containsKey).collect(Collectors.toMap(Function.identity(),map::get));完整示例:Listkeys=

java - 将 Hashmap 分配给 Hashmap

我有一个散列图,我想复制它以供其他用途。但是每当我复制它并重新使用它时,它也会改变原来的。这是为什么?do{Map>map1=originalMap;//attheseconditerationoriginalMapisthesameasmap1ofthelastiteration,//eventhoughthechangewasnogaccepted;//dosomethingwithmap1(changevalue);if(changeisaccepted){originalMap=map1;}}while(iteration提前致谢publicstaticMap>deepCopy

java - 迭代器有 .next() - 有没有办法获取前一个元素而不是下一个元素?

我有一个在HashMap上使用的迭代器,我保存并加载迭代器。有没有办法用Iterator获取HashMap中的上一个键?(java.util.迭代器)更新我将其保存为Red5连接中的一个属性,然后将其加载回来继续我停止的地方工作。另一个更新我正在遍历HashMap的键集 最佳答案 您可以使用ListIterator而不是Iterator。ListIterator有previous()和hasPrevious()方法。 关于java-迭代器有.next()-有没有办法获取前一个元素而不是下

java - HashMap 允许重复?

我对HashMap有疑问,因为我们都知道HashMap允许一对空键和值,我的问题是如果我这样写,m.put(null,null);m.put(null,a);它会抛出(错误或异常)还是会覆盖该值或返回的值是什么? 最佳答案 HashMap类型如果HashMap键是相同的键则覆盖该键map.put("1","1111");map.put("1","2222");输出key:value1:2222 关于java-HashMap允许重复?,我们在StackOverflow上找到一个类似的问题:

java - Lists、ArrayLists、Maps、Hashmaps、Collections 等之间有什么区别?

自从我重新开始使用Java编程以来,我一直在使用HashMap,但没有真正理解这些集合的东西。老实说,我不太确定一直使用HashMap是否最适合我或生产代码。到目前为止,只要我能够按照我在PHP中调用它们的方式获取我需要的数据,这对我来说并不重要(是的,我承认你现在在想什么消极的事情)在哪里$this_is_array['this_is_a_string_index']为调用变量数组提供了很多便利。所以现在,我已经使用Java工作了3个多月,遇到了我上面指定的接口(interface)并想知道,为什么会有这么多这些东西(更不用说vector,抽象列表{哦,列表是在...})?我的意思是

java - Java HashMap实现中的hash()方法有什么技巧?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:UnderstandingstrangeJavahashfunctionstaticinthash(inth){//ThisfunctionensuresthathashCodesthatdifferonlyby//constantmultiplesateachbitpositionhaveabounded//numberofcollisions(approximately8atdefaultloadfactor).h^=(h>>>20)^(h>>>12);returnh^(h>>>7)^(h>>>4);}这

Java 8 并发 HashMap

我观察到ConcurrentHashMap已在Java8中完全重写,变得更加“无锁”。我浏览了get()的代码方法并查看没有显式锁定机制:publicVget(Objectkey){Node[]tab;Nodee,p;intn,eh;Kek;inth=spread(key.hashCode());if((tab=table)!=null&&(n=tab.length)>0&&(e=tabAt(tab,(n-1)&h))!=null){if((eh=e.hash)==h){if((ek=e.key)==key||(ek!=null&&key.equals(ek)))returne.val

java - 当 HashMap 或 HashSet 达到最大容量时会发生什么?

就在几分钟前,我回答了一个关于“Java中HashMap的最大可能大小”的问题。正如我一直读到的那样,HashMap是一种可增长的数据结构。它的大小仅受JVM内存大小的限制。因此我认为对其大小没有硬性限制并相应地回答。(这同样适用于HashSet。)但有人纠正我说,由于HashMap的size()方法返回一个int,因此对其大小有限制。一个完全正确的观点。我只是试图在本地测试它但失败了,我需要超过8GB的​​内存才能在HashMap中插入超过2,147,483,647个整数,而我没有。我的问题是:当我们尝试插入2,147,483,647+1个元素时会发生什么HashMap/HashSe

java - ConcurrentHashMap put 与 putIfAbsent

JavaDocs也就是说,putIfAbsent等同于if(!map.containsKey(key))returnmap.put(key,value);elsereturnmap.get(key);因此,如果键存在于映射中,则它不会更新其值。这是正确的吗?如果我想根据某些条件更新键值怎么办?说下过期时间等这会是添加和更新缓存的更好实现吗?publicvoidAddToCache(Tkey,Vvalue){Vlocal=_cache.putifabsent(key,value);if(local.equals(value)&&local.IsExpired()==false){retu

java - 在迭代期间更改 HashMap 键

是否可以在迭代期间更改同一个HashMap实例的键?因为映射条目集没有方法entry.setKey()。现在我能想到的是创建另一个HashMap...MultipartParsingResultparsingResult=parseRequest(request);MapmpParams=parsingResult.getMultipartParameters();MapmpParams2=newHashMap();Iterator>it=mpParams.entrySet().iterator();while(it.hasNext()){Entryentry=it.next();St