Tag: 集合

可重排的Java集合,没有重复项

我正在搜索sortable(我的意思是在初始化后排序,很多次使用Comparator)Java类集合没有重复。 是否有更纯粹的解决方案,而不是编写不透明的代码,并阻止例如某些ArrayList添加另一个具有相同值的对象? 编辑1:我应该添加一些关于排序的解释。 我需要使用不同的比较器(实现的多样性)多次对这组值进行排序。

Java:iterator / iterable的Collections.list

为什么java.util.Collections.list仅用于Enumeration但不用于Iterator (或Iterable )? 或者为什么Iterator (或Iterable )没有这个函数的重载? 有没有其他方法可以做到这一点? 这有什么理由吗?

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) […]

为什么Map有loadFactor而List没有呢?

当用Java创建Map或List时,它们都具有相同的默认初始容量10.它们的容量随着获取新元素而增长。 但是,List仅在添加第11个元素时增长,并且在添加第8个元素时Map已经增长。 之所以会发生这种情况,是因为Map有一个loadFactor字段,它调节它可以“饱和”的程度。 当饱和度高于loadFactor时,Map会增长。 loadFactor默认为0.75。 我想知道为什么Lists和Maps有不同的机制来决定何时增加它们的初始容量?

计算文本文件使用地图中的出现次数

下面的代码将计算每个角色的出现次数。 如果我在文本文件输出中有abc将是1 b 1 c 1.我在许多网站中读到for循环将花费大量时间并且最好使用哈希映射实现相同。 你们任何人都可以帮助我如何转换这个实现哈希映射的程序吗? import java.io.*; class Count_Char { public static void main(String[] args) { try { FileInputStream file = new FileInputStream(“D:\\trial.txt”); DataInputStream dis = new DataInputStream(file); BufferedReader br = new BufferedReader(new InputStreamReader(dis)); String Contents=””; String str=””; while ((Contents = br.readLine()) != null) { str+=Contents; } char[]char_array =str.toCharArray(); for(int count =0;count<char_array.length;count++){ char […]

检索按值排序的地图中条目周围的固定数量的条目

POJO即。 Entry.java表示排行榜中的条目。 排名是排行榜中的位置,1是得分最高的用户 public class Entry { private String uid; private int score; private int position; @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + score; result = prime * result + ((uid == null) ? 0 : uid.hashCode()); return result; } @Override public […]

如何从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 […]

这两组陈述之间的确切区别是什么?

Set union = new HashSet(s1); 和 Set union = new HashSet(); Set s1 = new HashSet(); union.addAll(s1);

字典类

Java字典类中是否可以为单个键设置多个值?

在java中创建的无序映射

所以我需要有一些多字符的字符,其中添加一个重复的字符会将基数增加1,并且字符的多样性不应该大大增加对象占用的内存。 这将通过某种地图实现,其中字符是键,其中包含表示该字符在集合中表示的数字的值。 但是,我正在努力弄清楚哪个集合最适合这个(我正在查看hashmap)以及如何声明这种数据类型。 我正在做这样的事情 Map m = new HashMap(char, int); 但以上是一个不正确的声明,我不知道如何正确处理这个问题。