cmdkmd的专栏

在做想项目时遇到这样一种情况,就是遇到这样一种情况,就是删除一个集合中的重复对象,如果是基本数据类型,那就很少删了,但如果是对象了,你再以那样的方式删除就不行了,因为在遍历集合时是不能修改集合数据(有一个list可以,但是我没有测试),我感觉深刻理解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;}@Overridepublic boolean equals(java.lang.Object obj) {if (!(obj instanceof WorkItem)) {return false;}WorkItem workItem = (WorkItem) obj;return id.equals(workItem.id);}@Overridepublic int hashCode() {//hashCode 只是一个数值,,有N种实现方式,这只是普通的一种return id.hashCode();}}

悠然享受和大自然融合之乐。

cmdkmd的专栏

相关文章:

你感兴趣的文章:

标签云: