Tag: hashmap

Java Generic HashMap实现:对象无法转换V

我正在尝试实现一个通用的HashMap,但由于某种原因,java编译器不允许我返回正确的generics类型。 这是我的HashMap代码: public class SimpleHashMap { private int tableSize; private HashEntry[] table; public SimpleHashMap(){ table = new HashEntry[tableSize]; for(int i = 0; i < table.length; i++){ table[i] = null; } } public V put(K key, V value){ int keyIndex = getHashCode(key); if(table[keyIndex] == null){ table[keyIndex] = new HashEntry(key, value); } else{ table[keyIndex] = new HashEntry(key, […]

Java哈希码在一种情况下发生冲突而在另一种情况下不会发生碰撞,为什么? (以下代码)

我尝试编写一个小程序来演示java中的哈希冲突,只重写了equals而不是hashcode()方法。 这是为了certificate两个不等对象可以具有相同哈希码的理论。 这是针对行为问题的面试问题。 我创建了200,000个对象,将它们存储在一个数组中,然后将它们进行比较以查看哪些是重复的。 (为此我在对象创建阶段之后使用嵌套for循环迭代对象数组。)对于大约200,000个对象,我得到9次碰撞。 第一个是索引196和121949处的对象。然后我继续打印这些哈希码以显示两个值是相同的。 但是我得到了一些非常令人惊讶的行为。 如果我遍历嵌套的for循环并打印哈希码的第一次碰撞,我得到相同的哈希码值 1867750575 1867750575 对于索引196和121949处的两个对象。 但是如果我注释掉嵌套for循环以检测所有冲突并直接打印索引196和121949的元素的哈希码,我得到 1829164700 366712642 注意,我没有评论这些元素的创建,只是我检查碰撞的部分。 为什么会发生这种情况,即使我不迭代它们,哈希码是不是应该一致? 附录1:据我所知,有没有一个消息来源,按照生日原则,如果我创建200,000个对象,我必须得到一个碰撞,如何迭代每个hascode或不改变任何东西? 附录2:我尝试添加另一个200000大小的数组,只是为了查看碰撞索引是否发生了变化,但是没有,所以显然在未提交循环的情况下对二进制文件进行更改不会进行任何更改。 因此,更改二进制更改哈希码的假设并不成立。 这是我的代码 import java.util.HashMap; public class EmployeeFactory { private static int counter = 0; public int id; public String empName; EmployeeFactory() { id = counter; empName = “employee_” + id; counter++; } @Override public boolean equals(Object o) […]

使用java更新ArrayList / HashMap中的元素

我正在为uni做一些课程,我真的应该知道这一点,但我不确定如何更新存储在HashMap中的对象。 我有一个抽象的’User’类,它扩展为’Customer’和’Staff’类,其实例存储在名为’mapUsers’的HashMap中。 我认为可以做的方法是将要修改的元素保存到临时 ‘User’对象中,在这个临时实例上我可以以任何必要的方式修改Object。 我真正的问题是,这将更新存储在HashMap中的对象,还是我必须删除存储在HashMap中的元素并替换为修改后的临时实例。 有没有更简单的方法来做到这一点,我想也许是这样的 HashMap.get(index).performOperation(); 类似的东西,我可以在不删除元素的情况下执行操作。

Hashmap单键持有一个类。 计算密钥并检索计数器

我正在开发一个数据库自我项目。 我有一个输入文件来自: http : //ir.dcs.gla.ac.uk/resources/test_collections/cran/ 在处理成1400个单独的文件后,每个文件名为00001.txt ,… 01400.txt …)并在对它们应用Stemming之后,我将它们分别存储在特定文件夹中,让我们用以下格式调用它: StemmedFolder : 在StemmedFolder中: 00001.txt包括: investig aerodynam wing slipstream brenckman experiment investig aerodynam wing 在StemmedFolder中: 00756.txt包括: remark eddi viscos compress mix flow lu ting 等等…. 我写了代码: 得到StemmedFolder ,统计独特的单词 按字母顺序排序 添加文档的ID 将每个保存到新文件00001.txt到01400.txt,如下所述 {我可以提供这4个部分的代码 ,以防有人需要了解实施或更改或任何编辑的方式} 每个文件的输出将产生一个单独的文件。 (1400,每个名为00001.txt , 00002.txt …)在特定文件夹中,我们可以使用以下格式调用它FrequenceyFolder : 在FrequenceyFolder: 00001.txt中包括: 00001,aerodynam,2 00001,agre,3 00001,angl,1 00001,attack,7 00001,basi,4 …. […]

HashMap group by(Java)

有没有办法我们可以按Key分组并在Java中的HashMap中添加值 HashMap map = new HashMap(); map.put(“A”, 2); map.put(“A”, 3); map.put(“B”, 4); map.put(“A”, 5); map.put(“B”, 4); 结果是 A = 10 B = 8 任何帮助都会有所帮助!

如果计算的哈希码超过INTEGER MAX LIMIT会发生什么?

这是来自Java HashTable Class的hashCode()实现。 如果哈希表中的元素数量很大且哈希码超过INTEGER MAX LIMIT -2,147,483,648到2,147,483,647会怎么样? 我假设hashCodes将是正整数。 public synchronized int hashCode() { int h = 0; if (count == 0 || loadFactor < 0) return h; // Returns zero loadFactor = -loadFactor; // Mark hashCode computation in progress Entry[] tab = table; for (int i = 0; i < tab.length; i++) for (Entry e […]

如何从hashmap中检索键和值

我试图通过对象将值插入哈希映射,我想检查是否将值插入到哈希映射中。 所以我使用此代码但在运行时我无法获得任何输出。 怎么解决这个? 码: import java.util.*; import java.io.*; import java.lang.*; public class TaskList { private static HashMap dataz = new HashMap(); private static HashMap screen_dataz = new HashMap(); public final static Object[][] longValues = {{“10”, “kstc-proc”, “10.10.10.10.10.”,”5″,”O”},{“11”, “proc-lvk1”, “12.1.2.”,”4″,”O”},{“13”, “trng-lvk1”, “4.6.1.”,”3″,”O”}}; private static String sl,pid,tid,mval,status; public static void main(String args[]) { addTask(); } public static […]

Map <Object,List >的组合

我有一个HashMap<GC, List> ,其示例数据如下: key values gc1 – rr1 – rr2 – rr3 gc2 – rr4 – rr5 gc3 – rr6 我需要从不同的GC创建所有可能的RR组合,如: Combination1: rr1, rr4, rr6 Combination2: rr1, rr5, rr6 Combination3: rr2, rr4, rr6 Combination4: rr2, rr5, rr6 Combination5: rr3, rr4, rr6 Combination6: rr3, rr5, rr6 到目前为止,我已经尝试过,正如@Sanket Makani建议的那样,将我的HashMap<GC, List>转换为List<List> ,然后遍历所有元素,如: List<List> inputList = new ArrayList<List>(); for […]

如何在每个循环中跳过a的第一次迭代?

编程对我来说是新的,我试图了解一些概念。 我正在尝试创建一个简单的小程序,在地图上显示欧洲的首都城市,使用drawLine方法将它们连接起来。 我遇到了一个问题,我无法成功加入两个省会城市。 我想我理解为什么,但我想不出办法绕过它。 draw方法中的后两个参数与前两个参数相同,但我无法跳过第一次迭代。 这对我来说是全新的,我正试图从书本和网络中学习。 public void paint(Graphics g) { super.paint(g); g.drawImage(image, 0, 0, this); for (Entry entry : map.entrySet()) { g.setColor(Color.BLUE); g.fillOval(entry.getValue().a, entry.getValue().b, 5, 5); g.setColor(Color.BLUE); g.drawString(entry.getKey(), entry.getValue().a+7, entry.getValue().b+7); g.setColor(Color.RED); g.drawLine(entry.getValue().a, entry.getValue().b, 0, 0);//Problem } } 有人可以把我推向正确的方向吗? 我正在考虑使用迭代器而不是每个循环使用迭代器,这是我目前唯一的想法。

如何使用lambda获取哈希映射中值的键数

我有一个哈希映射 Map<Integer, List> Directmap = new HashMap<Integer, List>() {{ put(0, Arrays.asList(a, b)); put(1, Arrays.asList(b, c)); put(2, Arrays.asList(d)); put(3, Arrays.asList(d, e)); put(4, Arrays.asList(e)); put(5, Arrays.asList()); }}; Directmap: {0=[a, b], 1=[b, c], 2=[d], 3=[d, e], 4=[e], 5=[]} 我想计算每个值的键数。 例如: “a”有一个键, “b”有两个键,……, “e”有两个键,即3和4。 我试过这样的事情: Map ex = Directmap.entrySet().stream() .collect(Collectors.groupingBy(e -> e.getKey(), Collectors.counting())); 我想要以键数作为输出的值。 喜欢这个 : a=[1], b=[2], c=[1], […]