繁体   English   中英

存储唯一整数的好方法

[英]Good way to store unique integers

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

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

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

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

谢谢!

一种是将整数存储在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的一个可能问题是它们没有被排序,因此如果排序很重要,您将需要查看使用其他各种有序集合。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM