7

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

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

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

但显然这不会起作用,因为numberList它包含一个Integer对象列表,所以无论数量多少,每个对象都是唯一的对象。

谢谢!

4

2 回答 2

13

一种是将整数存储在 a 中Set<Integer>,例如 a HashSet<Integer>。集合不允许重复。

编辑
此外,集合的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]

此外,HashSet 的一个可能问题是它们没有排序,因此如果排序很重要,您将需要考虑使用其他种类的有序 Set 之一。

于 2012-07-01T22:13:01.910 回答
3

最紧凑的形式不是 aBitSet吗?它在存储方面是有效的,因为它会无限扩展。它也不会不必要地使用存储。

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

于 2012-07-01T22:22:46.620 回答