コレクション内の重複オブジェクトの除去
プロジェクトを考えているときに遭遇するのは、1つの集合の重複オブジェクトを削除することです.基本データ型であれば削除は少ないですが、オブジェクトであれば、そのように削除するのはだめです.遍歴集合では集合データを修正できないので(リストはできますが、テストはありません)、equalsとhashcodeを深く理解する必要があると思います.
コードを直接アップロードしました
コードを直接アップロードしました
package com.xzq.test;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
ArrayList<WorkItem> arraylist = new ArrayList<WorkItem>();
arraylist.add(new WorkItem("1", "name"));
arraylist.add(new WorkItem("2", "name"));
arraylist.add(new WorkItem("1", "name"));
arraylist.add(new WorkItem("4", "name"));
arraylist.add(new WorkItem("4", "name"));
arraylist.add(new WorkItem("5", "name"));
arraylist.add(new WorkItem("3", "name"));
arraylist.add(new WorkItem("1", "name"));
arraylist.add(new WorkItem("7", "name"));
remove(arraylist);
for (WorkItem workItem : arraylist) {
System.out.println(workItem.id + " " + workItem.name);
}
}
/**
*
*
* @param list
*/
public static void remove(List<WorkItem> list) {
int size = list.size();
for (int i = 0; i < size - 1; i++) {
for (int j = size - 1; j > i; j--) {
if (list.get(j).equals(list.get(i))) {
list.remove(j);
}
}
}
}
/**
* HashSet
*
* @param list
*/
public static void removeHashSet(List<WorkItem> list) {
HashSet<WorkItem> h = new HashSet<WorkItem>(list);
list.clear();
list.addAll(h);
}
/**
*
*
* @param list
*/
public static void removeOrder(List<WorkItem> list) {
HashSet<WorkItem> set = new HashSet<WorkItem>();
ArrayList<WorkItem> newList = new ArrayList<WorkItem>();
for (Iterator<WorkItem> iter = list.iterator(); iter.hasNext();) {
WorkItem element = iter.next();
if (set.add(element)) {
newList.add(element);
}
}
list.clear();
list.addAll(newList);
}
}
package com.xzq.test;
public class WorkItem {
public String id;
public String name;
public WorkItem(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(java.lang.Object obj) {
if (!(obj instanceof WorkItem)) {
return false;
}
WorkItem workItem = (WorkItem) obj;
return id.equals(workItem.id);
}
@Override
public int hashCode() {
//hashCode , N ,
return id.hashCode();
}
}