1.最愚蠢的方式
private List removeDup(List Items){
int ItemsSize = Items.size();
List newItems = new ArrayList();
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(new LinkedHashSet(list));
的方式,这种方式只会比较内存地址,也就是只能去除重复的指针。
3.使用Set的方式
使用Set 将会导致list 无序,并且需要被排序的元素实现Collection 接口
List list = new ArrayList();
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 set = new TreeSet();
for (Order order : list) {
set.add(order);
}
另外一种使用Set 的方式,可以不实现Collection 接口。
List fruitList = new ArrayList();
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 sss = new TreeSet(new Comparator() {
@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);
}
当然还有更多的方式,这里只是一小部分