如何去除List集合中的重复数据

需求:用户权限查看,页面显示权限树时缺少了一个分支

原因:二级权限带有一个三级权限,但具有了相同的二级权限,所以未能正常显示

解决:去除List中重复的权限数据

方式:

参考资料:[url]http://bbs.csdn.net/topics/390247210[/url]

1.List<Long>


public static void removeDuplicate(List list) {
HashSet h = new HashSet(list);
list.clear();
list.addAll(h);
System.out.println(list);
}


2.List<Po>
Po类中具有编号或名称属性

public static void removeDuplicateWithOrder(List list) {
Set<Long> set = new HashSet<Long>();
List<Po> newList = new ArrayList<Po>();
for (Iterator iter = list.iterator(); iter.hasNext();) {
Po element = iter.next();
if (set.add(element.getId()))
newList.add(element);
}
list.clear();
list.addAll(newList);

}


总结:
[list]
[*][b]去除List中的重复数据,通过set集合的key为非重复值的原理[/b]
[/list]

示例:



import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
* List 集合去重
*/
public class RemoveRepeatTestMain {

/**
* @param args
*/
public static void main(String[] args) {

List<String> list = new ArrayList<String>(8);
list.add("a");
list.add("b");
list.add("a");
list.add("c");
list.add("a");
list.add("d");
list.add("d");
list.add("a");
method1(list);
method2(list);
method3(list);
method4(list);
}

/**
* 方式1
* 两个集合,将原有元素放入新的集合中,并判断新的集合是否已包含加入的元素
* @param list
*/
public static void method1(List<String> list){
List<String> newList = new ArrayList<String>(list.size());
for(String str : list){
if(null != newList && newList.size() > 0 && !newList.contains(str)){
newList.add(str);
}else if ( null == newList || newList.size() == 0 ){
newList.add(str);
}
}
printList(newList);
}

/**
* 利用 set.add 方法,若set中不含此元素,添加成功,返回TRUE,否则FALSE
* @param list
*/
public static void method2(List<String> list){
List<String> newList = new ArrayList<String>(list.size());
Set<String> setTemp = new HashSet<String>(list.size());
for(String str : list){
if(setTemp.add(str)){
newList.add(str);
}
}
printList(newList);
}

public static void method3(List<String> list){
List<String> newList = new ArrayList<String>(new HashSet<String>(list));
printList(newList);
}

public static void method4(List<String> list){

List<String> newList = new ArrayList<String>(list.size());
Set<String> set = new HashSet<String>(list.size());
set.addAll(list);
newList.addAll(set);
printList(newList);
}

public static void printList(List<String> list){
for(String str : list){
System.out.print(str);
}
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值