1、如何利用set、list做检查重复的功能
代码展示
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("D");
list.add("C");
list.add("B");
System.out.println("list === > " + list);
Set<String> set = new HashSet<String>();
for(String s : list) {
set.add(s);
}
System.out.println("set === >" + set);
if(set.size() != list.size()) {
System.out.println("有重复的元素存在");
}
}
上述代码的运行结果是:
list === > [A, B, D, C, B]
set === >[A, B, C, D]
有重复的元素存在
2、为什么会有上述效果呢?
ArrayList的add方法
/**
* {@inheritDoc}
* @throws IllegalArgumentException if this {@code AttributeList} is
* <a href="#type-safe">type-safe</a> and {@code element} is not an
* {@code Attribute}.
*/
@Override
public boolean add(Object element) {
adding(element);
return super.add(element);
}
HashSet的add方法
public boolean add(T o) {
if (!o.getClass().isAssignableFrom(c)) {
MessageFormat form = new MessageFormat(ResourcesMgr.getString
("attempting.to.add.an.object.which.is.not.an.instance.of.class"));
Object[] source = {c.toString()};
throw new SecurityException(form.format(source));
}
return set.add(o);
}
3、结论
List接口中的内容可以重复
Set接口不能加入重复元素,但是可以排序
4、其他实现检查List中存在重复的方法
代码展示1
利用StringBuilder
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("D");
list.add("C");
list.add("B");
list.add("C");
System.out.println("list === > " + list);
StringBuilder builder = new StringBuilder();
for (String str : list) {
// 如果不存在返回 -1。
if (builder.indexOf(str) > -1) {
System.out.println("重复的有:" + str);
} else {
builder.append(str);
}
}
}
上述代码的结果是:
list === > [A, B, D, C, B, C]
重复的有:B
>重复的有:C
代码展示2
利用Map
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("D");
list.add("C");
list.add("B");
list.add("B");
list.add("C");
System.out.println("list === > " + list);
HashMap<String,Integer> hashMap = new HashMap<String, Integer>();
for(String string : list){
if(hashMap.get(string) != null){ //hashMap包含遍历list中的当前元素
Integer integer = hashMap.get(string);
hashMap.put(string, integer+1);
System.out.println("the element:"+string+" is repeat");
}else{
hashMap.put(string,1);
}
}
}
上述代码的结果是:
list === > [A, B, D, C, B, B, C]
the element:B is repeat
the element:B is repeat
the element:C is repeat