我有一个包含大约20,000,000个条目的列表。大约5,000,000个条目是唯一的。我需要遍历我的列表,识别唯一条目,并为每个条目分配0到5,000,000之间的整数。
目前,我按顺序将每个条目添加到TreeSet,然后找出它使用.headSet()的位置。我想这不是最理想的。
while((nextline = wholefile.listIterator().next()) != null){
//sorted, unique, addition
keywords.add(nextline);
//hmmm, get index of element in TreeSet?
k_j = keywords.headSet(nextline).size();
}
当我调用.add()时,有没有办法获取位置?
答案 0 :(得分:2)
我只想使用一个计数器和HashMap<Keyword, Integer>
。对于列表中的每个关键字,从地图中获取其位置。如果为null,则将关键字放在地图中,并将当前计数器值作为值,然后递增计数器。
答案 1 :(得分:1)
我会这样做:
Map<YourObject, Integer>
来计算对象。在代码中......
List<String> keywords = Arrays.asList("a", "b", "c", "a");
Map<String, Integer> counts = new HashMap<String, Integer>();
for (String str : keywords) {
if (!counts.containsKey(str))
counts.put(str, 0);
counts.put(str, counts.get(str) + 1);
}
int seq = 0;
for (String keyword : counts.keySet())
if (counts.get(keyword) == 1) // is unique?
System.out.println(keyword + " -> " + seq++); // assign id.