我的问题是:确定一个数字是否包含在Collection
中以确定是否将其添加到集合并保持唯一性的快速方法是什么。如果我能帮助它,我宁愿不遍历列表。
我有List<Integer>
名为numberList
。我希望它存储唯一的整数,并且永远不允许添加重复项。我想做这样的事情:
private void add(int number) {
if (!numberList.contains(number)) {
numberList.add(number);
}
}
但显然这不会起作用,因为numberList
包含Integer
个对象的列表,因此无论数字如何都是唯一的对象。
谢谢!
答案 0 :(得分:13)
一种是将整数存储在Set<Integer>
中,例如HashSet<Integer>
。集合不允许重复。
修改强>
此外,Collection的contains(...)
方法使用对象的equals(...)方法来查看它是否由集合保存,因此如果您需要使用List作为上述方法,也可以防止重复你的收藏。自己测试一下,你会发现它就是这样。
例如:
List<Integer> numberList = new ArrayList<Integer>();
int[] myInts = {1, 1, 2, 3, 3, 3, 3, 4};
for (int i : myInts) {
if (!numberList.contains(i)) {
numberList.add(i);
}
}
System.out.println(numberList);
将返回:[1, 2, 3, 4]
另外,HashSets的一个可能问题是它们没有被排序,所以如果排序很重要,你会想要使用其他一些有序集合。
答案 1 :(得分:3)
最紧凑的形式不是BitSet
吗?它在存储方面是有效的,因为它将无限扩展。它也不会不必要地使用存储。
您是否在多线程环境中工作?如果是这样,其他结构可能更好/更有效。