添加到TreeSet时记录位置

时间:2012-07-23 21:00:15

标签: java treeset

我有一个包含大约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()时,有没有办法获取位置?

2 个答案:

答案 0 :(得分:2)

我只想使用一个计数器和HashMap<Keyword, Integer>。对于列表中的每个关键字,从地图中获取其位置。如果为null,则将关键字放在地图中,并将当前计数器值作为值,然后递增计数器。

答案 1 :(得分:1)

我会这样做:

  1. 通过填充Map<YourObject, Integer>来计算对象。
  2. 浏览此地图并为每个映射到值1的键指定序列号。
  3. 在代码中......

    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.