0

给定一个arraylist和Hashmap。

我想在这个集合中添加随机整数。添加时必须检查值是否已经输入。如果是,它应该返回true并且不应该添加到集合中,或者应该添加值。那么哪个集合是其中首选??解释。

现在,如何将整数单独添加到 hashmap 或者如果我们添加到 hashmap 中的键值对是什么,这是模棱两可的?但这是面试中被问到的问题,需要给出一个答案

4

6 回答 6

1

使用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");
}
于 2012-11-16T19:18:17.587 回答
0

如果在面试中给出这个问题,我会认为这是一个棘手的问题......如果添加的项目顺序很重要,那么使用 LinkedHashSet,否则使用 HashSet......

于 2012-11-16T19:21:58.210 回答
0

您可以简单地使用 ArrayList 来添加值,也可以在添加值之前监控这些值,例如:

List list = new ArrayList();

if (list.contains(whatever)) {
 System.out.println("do something"); 
} else {
   }

您也可以使用 Hashmap 来做同样的事情,但这取决于您要输入的问题的要求

于 2012-11-16T19:08:12.863 回答
0

您可以简单地使用Collection#contains(...).

于 2012-11-16T19:08:31.433 回答
0

对于这个特殊的问题,我建议使用 HashMap,因为它本身就可以检查重复值,而无需您做任何事情。

如果你使用了一个 ArrayList,你需要用'indexOf'检查,如果之前已经添加了整数,这需要搜索整个数组。

此外,Hashmaps 是按 key 排序的,这使得搜索效率更高。

于 2012-11-16T19:08:33.970 回答
0

就像是IntHashSet

......

http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/api/all/org/apache/lucene/util/collections/IntHashSet.html

于 2012-11-16T19:15:36.540 回答