从List中获取唯一/未重复的值

时间:2013-06-16 10:45:40

标签: java algorithm arraylist

我有一个可能包含重复值的ArrayList tmp_list。我的目标是填充另一个ArrayList filtered_tmp_list,每个值只出现一次。这是我做的:

ArrayList<String> filtered_tmp_list = new ArrayList<String>();

filtered_tmp_list.add((String) tmp_list.get(0));

for(int i=0; i<tmp_list.size(); i++){
    String cmp = (String) tmp_list.get(i) ;
    int doubled = 0;
    for(int j=0; j<filtered_tmp_list.size(); j++){
        String cmpd = (String) tmp_list.get(j) ;
        if(cmp.compareTo(cmpd)==0){
            doubled ++ ;
        }
    }
    if(doubled==0) filtered_tmp_list.add(cmp);
}

我的想法是检查filtered_tmp_list中的值是否已经tmp_list多次出现,如果是这样,我什么都不做,否则:如果doubled等于零,则意味着值应该插入filtered_tmp_list

嗯,正如你所料,我在这里是因为我得到重复的价值...... 我错过了什么?

感谢。

3 个答案:

答案 0 :(得分:6)

你走了:

Replace below code it works:

for(int j=0; j<filtered_tmp_list.size(); j++){
        **String cmpd = (String) filtered_tmp_list.get(j) ;**
        if(cmp.compareTo(cmpd)==0){
            doubled ++ ;
        }
    }

答案 1 :(得分:3)

使用Set然后List

List<String> ret = new ArrayList<>(new HashSet<>(origList));

Set不能包含重复元素;自HashSet实施String.equals()以来,使用.hashCode()

如果您想在初始列表中保留元素的原始顺序,请将HashSet替换为LinkedHashSet

(如果这不是Java 7,请用String填充空白钻石

编辑:请参阅@ zerocool关于原始代码

的错误的答案

答案 2 :(得分:1)

如果您担心插入顺序

List<String> ret = new ArrayList<String>(new LinkedHashSet<String>(origList));
相关问题