给定一个数组列表和哈希图。
我想向这个集合添加随机整数。添加时必须检查是否 值是否已输入。如果是,它应该返回 true 并且不应该添加到集合中,或者值应该是 添加。那么其中哪个系列更受欢迎呢?解释。
现在,如果我们要添加到哈希图,如何将整数单独添加到哈希图中,或者这里的键值对是什么,这是模棱两可的,但这是面试中被问到的问题,需要给出一个答案
使用 Set,它会处理唯一的条目:
Set<Integer> set = new HashSet<Integer>();
//...
int randomNumber = ...
boolean unique = set.add(randomNumber);
if (unique) {
System.out.println(randomNumber + " was added to set");
} else {
System.out.println(randomNumber + " already was in set");
}
您可以简单地使用 ArrayList 添加值,也可以在添加值之前监视值,例如:
List list = new ArrayList();
if (list.contains(whatever)) {
System.out.println("do something");
} else {
}
您也可以使用Hashmap来做同样的事情,但这取决于根据问题的要求,您要输入什么键
简单地使用Collection#contains(...)
.
对于这个特定的问题,我建议使用HashMap,因为它本机检查重复值,而无需您执行任何操作。
如果你使用了 ArrayList,你需要用 'indexOf' 检查之前是否添加过整数,这需要搜索整个数组。
此外,哈希图按键排序,这使得搜索高效。
类似于IntHashSet
..........
http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/api/all/org/apache/lucene/util/collections/IntHashSet.html
如果在面试中给出这个问题,我认为这是一个棘手的问题......如果添加项的顺序很重要,则使用 LinkedHashSet,否则使用 HashSet...