草庐IT

java - 在集合中查找单个对象,HashMap vs List filter

我生成了Customer的列表从我阅读的文件中。我将这些客户存储在HashMap中其中键是一个唯一的id:Mapcustomers=readCustomers();//Foreachobjectcreatedcustomers.put(c.getCustomerId(),c);我从第二个文件中获取用于更新HashMap中对象的数据.我使用key来查找要更新的对象://getthedetailsinformationscustomers.get(customerId).setDetails(details);在java8中我可以使用:classCustomer{...publicstat

java - 按整数值 desc 对 HashMap 进行排序

如何按整数值对hashmap进行排序,我找到的答案之一是hereEvgeniyDorofeev写的,他的回答是这样的HashMapmap=newHashMap();map.put("a",4);map.put("c",6);map.put("b",2);Object[]a=map.entrySet().toArray();Arrays.sort(a,newComparator(){publicintcompare(Objecto1,Objecto2){return((Map.Entry)o2).getValue().compareTo(((Map.Entry)o1).getValue(

java - 如何获取 Java Hashmap 上冲突次数的指标?

我正在实现自定义哈希函数,如果我在HashMap存储桶中发生多次冲突,我怎么知道存储桶中存储了多少元素? 最佳答案 API中没有对此的直接支持。用于存储桶的成员变量table甚至不是公开的,因此扩展类不会让你走得太远。假设您正在评估哈希函数而不是在生产代码中这样做,您可以使用反射来传递这些约束。我设法打印了桶中的内容。从这一点来看,分析分布指标应该不难。这是代码:测试驱动程序:importjava.lang.reflect.Field;importjava.util.*;classTest{publicstaticvoidmain(

java - 为什么自定义对象不是 HashMap 的等效键?

我在使用自己的类作为HashMap的键时遇到问题publicclassActorId{privatefinalintplayerId;privatefinalintid;ActorId(intplayerId,intid){this.playerId=playerId;this.id=id;}publicbooleanequals(ActorIdother){returnthis.id==other.id&&this.playerId==other.playerId;}publicinthashCode(){inthash=1;hash=hash*31+playerId;hash=ha

java - HashSet 如何处理 hashCode()?

我试图更深入地理解java.util.Collection和java.util.Map但我对HashSet的功能有一些疑问:在文档中,它说:这个类实现了Set接口(interface),由哈希表(实际上是一个HashMap实例)支持。好的,所以我可以看到HashSet总是有一个Hashtable工作在后台。哈希表是一种结构,每次你想向它添加一个新元素时,它都会要求一个键和一个值。然后,根据key的hashCode将value和key存入一个bucket中。如果两个键的哈希码相同,则它们使用链表将两个键值添加到同一个桶中。如果我说错了,请纠正我。所以,我的问题是:如果HashSet始终有

Java 线程安全的 LinkedHashMap 实现?

我需要使用LinkedHashMap的removeEldestEntry()方法。以线程安全的方式使用LinkedHashMap的和removeEldestEntry()方法的最简单方法是什么? 最佳答案 您可以匿名扩展LinkedHashMap改变removeEldestEntry(...)的行为,然后将匿名类的实例包装在同步映射中。你没有提到你需要什么类型的参数,所以我使用在这个例子中。Mapmap=Collections.synchronizedMap(newLinkedHashMap(){privatestaticfinal

java - 具有 800 万个条目的 HashMap 变慢

我有一个HashMap,其中有800万个Point2D映射到一个LinkedList。privateMap>adjacencyList;一切正常,但我需要很长时间才能从HashMap获取数据。有没有其他方法可以用来优化数据输出?我愿意牺牲put()所花费的时间来支持get()所花费的时间。 最佳答案 首先是检查哈希码的分布。首先检查一下,但稍作改动。map中Key的哈希码在内部通过以下方式重新哈希:staticfinalinthash(Objectkey){inth;return(key==null)?0:(h=key.hashCo

java - 如何从流计算 map ,然后检查 map 值的属性?

我的要求:我有一个接口(interface),该接口(interface)应仅包含诸如publicfinalstaticshortSOME_CONST=whatever之类的条目。问题:短常量需要唯一。当存在重复项时,我主要对SOME_CONST_A、SOME_CONST_B、...名称引起冲突感兴趣。我写了下面的测试来通过反射来测试它。它有效,但我发现它笨重且不太优雅:@TestpublicvoidtestIdsAreUnique(){Map>fieldNamesById=newLinkedHashMap();Arrays.stream(InterfaceWithIds.class.

java - Java 中 HashMap 的克隆实用程序

是否有为HashMap执行clone()方法的java实用程序,以便它复制map元素而不仅仅是map对象(如clone()在HashMap类中)? 最佳答案 元素中引用的其他对象呢?你想要你的克隆有多深?如果您的map元素没有任何深度引用和/或所有内容都是Serializable,您可以通过ObjectOutputStream将map序列化为ByteArrayOutputStream然后立即反序列化它。唯一的替代方法是手动完成。 关于java-Java中HashMap的克隆实用程序,我们

java - 可以控制 Java 中对象的身份吗?如果可以,如何控制?

这是一个简单的编程问题。我不是Java专家。假设我以类似于许多RDBMS示例所做的方式使用自定义类Company和Employee的对象:classEmployee{Companycompany;}classCompany{Stringname;}我需要保证不同的Company对象具有唯一的名称-即没有两个这样的对象可能具有相同的名称,因为从我的角度来看它没有意义,而且只会占用内存-如果有两名员工在IBM工作,则只有一个Company对象具有该name,句点。我现在的想法是将Company构造函数设为私有(private)-这样分配具有任意名称的Company对象的工作就被委托(del