草庐IT

java - hashmap 在调用 containsKey() 时检查什么?

ArrayListlis=newArrayList();lis.add(2);lis.add(3);ArrayListlis2=newArrayList();lis2.add(2);lis2.add(3);HashMap,Integer>map=newHashMap,Integer>();map.put(lis,7);System.out.println(map.containsKey(lis2));最初,我希望代码打印出“false”,因为lis和lis2是不同的对象。令人惊讶的是,代码打印出“true”。hashmap在调用containsKey()时检查什么?

java - 使用 ConcurrentHashMap 缓存

我有以下代码:publicclassCache{privatefinalMapmap=newConcurrentHashMap();publicObjectget(Objectkey){Objectvalue=map.get(key);if(value==null){value=newSomeObject();map.put(key,value);}returnvalue;}}我的问题是:map的put和get方法是线程安全的,但由于整个block未同步-多个线程可以添加相同的键两次吗? 最佳答案 put和get是线程安全的,因为从

java - 如何在 HashMap 中获取前 10 个键值对

我试图只迭代我的map中的前“n”个值,是否有任何可用的方法,或者我只需要用一个计数变量来控制它。下面是一个例子,我对一组属于同一个城市的名字进行了排序。现在我只想要前10个城市和其中的人名。for(Map.Entry>entry:map.entrySet()){Listlist=entry.getValue();//DisplaylistofpeopleinCity}是否有一个Map实现可以容纳固定数量的键值对?请得到一些指示。谢谢,-维杰·塞尔瓦拉吉 最佳答案 Howtofetchfirst10keyvaluepairsinHa

java - 在 HashMap 的 ArrayList 中搜索一个 HashMap

我有一个HashMap的ArrayList。我想在其中搜索HashMap但无法找到实现此目的的方法。请建议我怎么做?谢谢。 最佳答案 按照我的理解回答你的问题!for(HashMaphashMap:yourArrayList){//Foreachhashmap,iterateoveritfor(Map.Entryentry:hashMap.entrySet()){//DosomethingwithyourentrySet,forexamplegetthekey.StringsListName=entry.getKey();}}您的H

java - 为什么Java中的Set数据结构内部使用Map?

我想知道为什么HashSet使用HashMap,TreeSet使用TreeMap,LinkedHashSet在内部使用LinkedHashMap?因为Set只是携带和存储键而不是值,所以使用额外的内存空间不是不经济吗?HashMap的Entry内部类如下classEntryimplementsMap.Entry{finalKkey;Vvalue;Entrynext;finalinthash;.......}对于Set我们真的不需要那个Vvalue变量,对吗?那么在内部使用map对象的好处和主要原因是什么? 最佳答案 更少的代码、更少

java - 添加到 hashmap 需要很长时间

我在我的java程序中卡住了几行,这花费了太多时间(大约20秒),我觉得这很奇怪。这是几行Mapres2=newHashMap();for(URLurl:res){res2.put(url,null);}定义如下:Listres=newArrayList();在我的程序中,res.size()~=1500你知道我的问题可能来自哪里吗?谢谢! 最佳答案 java.net.URL的hashCode()方法执行DNS解析。URL类不适合在HashSet中使用或用作HashMap中的键。使用字符串或java.net.URI。这是一些背景:M

java - 如何使用第三方类对象作为 HashMap 键?

好的,我了解equals和hashcode的工作原理以及它们在hashmap中的使用方式。但是我想到了这个问题,如果我有一个没有覆盖哈希码和等于的第三方对象,我什至不允许修改它怎么办。考虑以下类://UnmodifiableclasspublicfinalclassWannaBeKey{privateStringid;privateStringkeyName;//CanbemanymorefieldspublicStringgetId(){returnid;}publicStringgetKeyName(){returnid;}//nohashcodeorequals:(}现在我想将这

java - 使用常规 HashMap 双重检查锁定

回到并发。现在很明显,要使双重检查锁定起作用,需要将变量声明为volatile。但是如果像下面这样使用双重检查锁定呢?classTest{privatefinalMapmap=newHashMap();publicBfetch(Akey,Functionloader){Bvalue=map.get(key);if(value==null){synchronized(this){value=map.get(key);if(value==null){value=loader.apply(key);map.put(key,value);}}}returnvalue;}}为什么它真的必须是Co

java - Consumer<T> 映射到 HashMap 中的 Class<T>

我想创建一个IdentityHashMap,Consumer>.基本上,我想用一个方法映射一个类型,说明如何处理这个类型。我想动态地能够用对象X说,执行Y。我能做到privateIdentityHashMap,Consumer>interceptor=newIdentityHashMap();但这很糟糕,因为我必须在使用它时将对象转换到lamba中。例子:interceptor.put(Train.class,train->{System.out.println(((Train)train).getSpeed());});我想做的是privateIdentityHashMap,Cons

java缓存hashmap每天过期

我想要一个HashMap,每天午夜,缓存都会过期。请注意,它是J2EE解决方案,因此多个线程可以访问它。用Java实现它的最佳方法是什么? 最佳答案 虽然其他建议也可以用来计算过期时间,但请务必注意:hashmap的过期可以延迟完成即没有任何监控线程!实现过期的最简单方法如下:1)扩展HashMap,并创建一个本地nextMidtime(Long)变量,在构造函数中初始化为System.currentTime....。这将被设置为等于下一个午夜时间,以毫秒为单位...2)将以下代码段添加到“containsKey”和“get”方法(