存储唯一整数的好方法

时间:2012-07-01 22:11:57

标签: java collections unique

我的问题是:确定一个数字是否包含在Collection中以确定是否将其添加到集合并保持唯一性的快速方法是什么。如果我能帮助它,我宁愿不遍历列表。

我有List<Integer>名为numberList。我希望它存储唯一的整数,并且永远不允许添加重复项。我想做这样的事情:

private void add(int number) {
  if (!numberList.contains(number)) {
    numberList.add(number);
  }
}

但显然这不会起作用,因为numberList包含Integer个对象的列表,因此无论数字如何都是唯一的对象。

谢谢!

2 个答案:

答案 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吗?它在存储方面是有效的,因为它将无限扩展。它也不会不必要地使用存储。

您是否在多线程环境中工作?如果是这样,其他结构可能更好/更有效。