去除集合中的重复对象

来源:互联网 发布:hyperion软件教学 编辑:程序博客网 时间:2024/05/17 02:03

在做想项目时遇到这样一种情况,就是遇到这样一种情况,就是删除一个集合中的重复对象,如果是基本数据类型,那就很少删了,但如果是对象了,你再以那样的方式删除就不行了,因为在遍历集合时是不能修改集合数据(有一个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;    }    @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();    }}


原创粉丝点击