2

我有一个tmp_list可能包含重复值的 ArrayList。我的目标是用每个值只出现一次来填充另一个 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.

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

谢谢。

4

3 回答 3

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 ++ ;
        }
    }
于 2013-06-16T11:01:29.787 回答
3

使用 aSet然后 a List

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

ASet不能包含重复的元素;和 aHashSet用于String实现.equals().hashCode().

如果要保留初始列表中元素的原始顺序,请将 替换HashSetLinkedHashSet

String(如果这不是 Java 7 ,则用空的菱形填充)

编辑:请参阅@zerocool 对原始代码有什么问题的回答

于 2013-06-16T10:47:06.230 回答
1

如果您担心插入顺序

List<String> ret = new ArrayList<String>(new LinkedHashSet<String>(origList));
于 2013-06-16T10:56:08.930 回答