import java.util.LinkedHashSet
import java.util.List
import java.util.Set
public class Test {
public static void main(String[] args) {
/**
* 初始化一个 ArrayList 对象,其元素有重复的值。
*/
List<String> list = new ArrayList<String>()
list.add("a")
list.add("b")
list.add("a")
list.add("c")
list.add("d")
System.out.println("list = " + list.toString())
/**
* 利用 LinkedHashSet 的特性(按照存入顺序保存,并保证元素不重复)。
* 将 list 传入 LinkedHashSet 的构造器中去掉重复元素
*/
Set<String> linkedHashSet = new LinkedHashSet<String>(list)
System.out.println("linkedHashSet = " + linkedHashSet.toString())
/**
* 将 linkedHashSet 转成 ArrayList 。
*/
list = new ArrayList<String>(linkedHashSet)
System.out.println("去重复后的 list = " + list)
System.out.println("需要注意的是,如果 List 的泛型类型是自定义类型,例如Person..等,需要重写 Person 类的 equals 和 hashCode 方法。")
}
}
效果:
假设原数据:List userlist ....
方法1(也是我比较常用的):
新建一个List,遍历原list,加入新的list
List newlist = new ArrayList()
for ( v : userlist) {
if (!newlist.contains(v))
newlist.add(v)
}
...
方法2:利用set集合
Set set = new HashSet()
List newlist = new ArrayList()
for (v : userlist) {
if(set.add(v)){
newlist.add(v)
}
}
!!!
百度真心坑啊,2015年的问题竟然也能拿出来让回答!
List<String> list = new ArrayList<>()/*list.add("abc")
list.add("abc")
list.add("def")
list.add("bcd")*/
Set<String> set = new LinkedHashSet<>()//这种方式保证去重后的元素相对位置不变
//Set<String> set = new HashSet<>()//这种方式去重后元素的位置很有可能变化了
set.addAll(list)
list.clear()
list.addAll(set)
for(String s : list){
System.out.println(s)
}
整个思路就是利用set中的元素是不重复的,来达到去重的目的