gpt4 book ai didi

java - 删除 Java 列表中的重复字符串

转载 作者:搜寻专家 更新时间:2023-11-01 04:04:37 25 4
gpt4 key购买 nike

更新:我猜 HashSet.add(Object obj) 不会调用 contains。有没有办法实现我想要的(使用 Set 删除重复字符串忽略大小写)?

原问题:试图从 java 中的字符串列表中删除重复项,但是在下面的代码中 CaseInsensitiveSet.contains(Object ob) 没有被调用,为什么?

public static List<String> removeDupList(List<String>list, boolean ignoreCase){
Set<String> set = (ignoreCase?new CaseInsensitiveSet():new LinkedHashSet<String>());
set.addAll(list);

List<String> res = new Vector<String>(set);
return res;
}


public class CaseInsensitiveSet extends LinkedHashSet<String>{

@Override
public boolean contains(Object obj){
//this not getting called.
if(obj instanceof String){

return super.contains(((String)obj).toLowerCase());
}
return super.contains(obj);
}

}

最佳答案

尝试

        Set set = new TreeSet(String.CASE_INSENSITIVE_ORDER);
set.addAll(list);
return new ArrayList(set);

UPDATE 但正如 Tom Anderson 所提到的,它不会保留初始顺序,如果这确实是一个问题,请尝试

    Set<String> set = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
Iterator<String> i = list.iterator();
while (i.hasNext()) {
String s = i.next();
if (set.contains(s)) {
i.remove();
}
else {
set.add(s);
}
}

打印

[2, 1]

关于java - 删除 Java 列表中的重复字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14040331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com