计数时间元素显示在链表Java中

时间:2013-03-04 07:32:07

标签: java loops

我正在编写一个方法,允许我计算String类型的元素在Strings类型的LinkedList中出现的次数。 我的代码如下所示不起作用。我继续在下面评论的行中获得索引超出界限。似乎无法找到错误

public int findDuplicate (LinkedList<String> e) {
    int j = 1;
    LinkedList<String> test = e;
    while (!test.isEmpty()){
        test = e;
        String value = test.pop();
        //Screws up here when i = 6 
        for(int i =0; i<=test.size() && test.get(i)!=null; i++){ 
            String value3 = test.get(i);
            if(e.get(i).equals(value) && i<=test.size()){
                String value2 = test.get(i); 
                j++;
                String Duplicate = e.get(i);
                e.remove(i);
            }
        }
        System.out.println(value + " is listed " + j + " times");

    }
    return j;
}

使用hashmaps ..仍然无法正常工作 public void findDuplicate(LinkedList e){

        Map<String,Integer> counts = new HashMap<String,Integer>();

        while(!e.isEmpty()){
            String value = e.pop();
            for(int i =0; i<e.size(); i++){
                counts.put(value, i);
            }
        }
        System.out.println(counts.toString());
}

2 个答案:

答案 0 :(得分:5)

您使用teste的方式似乎很清楚,您希望它们是两个独立的独立对象。事实上,他们不是。执行以下任务时:

    test = e;

teste最终都指向同一个列表。当你改变一个时,它们都会改变。

关于解决问题的好方法,您可能希望使用Map<String,Integer>来计算每个唯一字符串在列表中出现的次数。然后,您可以只对列表进行一次迭代,填充地图。最后,地图将给出最终计数。

答案 1 :(得分:2)

指数从0到test.size()-1。尝试使用:

for(int i =0; i<test.size() && test.get(i)!=null; i++){ 
...

并且,正如@NPE所指出的那样,这段代码无法正常工作,因为etest共享同一个对象。