java list 的一些去重算法

1.最愚蠢的方式

  

private List<T> removeDup(List<T> Items){
		int ItemsSize = Items.size();
		List<T> newItems = new ArrayList<T>();
		outSide:for(int i = 0; i < ItemsSize ; i++){
			Titem = Items.get(i);
			int newItemsSize = newItems.size();
			for(int j = 0; j < newItemsSize ; j++){
				T newItem = newItems.get(j);
				if(item.equals(newItem)){
					continue outSide;
				}
			}
			newItems.add(item);
		}
		return newItems;
	}

  虽然有效,但是低效,其中使用的是equals 方法,要复写T 的equals 方法。

 

2.使用 LinkedHashSet

return new ArrayList<T>(new LinkedHashSet<T>(list));

  的方式,这种方式只会比较内存地址,也就是只能去除重复的指针。

3.使用Set的方式

  使用Set 将会导致list 无序,并且需要被排序的元素实现Collection 接口

  

List<Order> list = new ArrayList<Order>();  
        list.add(new Order("1", "2.0"));  
        list.add(new Order("1", "2.0"));  
        list.add(new Order("1", "2.0"));  
        list.add(new Order("1", "2.0"));  
        Set<Order> set = new TreeSet<Order>();  
        for (Order order : list) {  
            set.add(order);  
        }  

  另外一种使用Set 的方式,可以不实现Collection 接口。

List<Fruit> fruitList = new ArrayList<Fruit>();  
        fruitList.add(new Fruit("1", "2.1"));  
        fruitList.add(new Fruit("1", "2.2"));  
        fruitList.add(new Fruit("1", "2"));  
        fruitList.add(new Fruit("1", "2"));  
        fruitList.add(new Fruit("1", "2"));  
Set<Fruit> sss = new TreeSet<Fruit>(new Comparator<Fruit>() {  
            @Override  
            public int compare(Fruit o1, Fruit o2) {  
                return (o1.getOrderId() + o1.getTotalPay()).compareTo(o2  
                        .getOrderId() + o2.getTotalPay());  
            }  
        }); 
 for (Fruit fruit : fruitList) {  
            sss.add(fruit);  
        }  

  

 当然还有更多的方式,这里只是一小部分

 

资料来源:http://blog.csdn.net/csdnbenbenchong/article/details/7291011

posted @ 2012-12-04 10:49  罐头里的晴天  阅读(586)  评论(0)    收藏  举报