List集合排重/排序

来源:互联网 发布:爱因斯坦名言知乎 编辑:程序博客网 时间:2024/05/16 18:24

1.集合排重HashSet;!list.contains(list.get(i))
2.集合排序使用Collections工具类,实现了Comparable接口的类传入里面调用一下Collections.sort() 方法

java中Collections.sort() 排序函数的用法- http://www.blogjava.net/landor2004/articles/sort.html

JAVA集合中常见的两种去重的两种方式- http://blog.csdn.net/code_my_dream/article/details/72818700


> 排重

一、相对简单的做法,回需要额外的存储空间:
1、重写Bean的hashcode和equals两个方法
2、然后new HashSet(List<Bean>),这样HashSet中的元素就是去重的了

二、使用双重循环,使用前一个元素与后面的元素逐个比较,如果相同,则把后面相同的元素删除
import java.util.HashSet;
import java.util.Iterator;
public class Bean{
    public static void main(String[] args){
        String userId = "001";
        String ip = "192.168.1.1";
        String roomId = "ROOM-001";
        Bean bean1_1 = new Bean(userId,"192.168.0.1","ROOM-011","uuid","name");
        Bean bean1_2 = new Bean(userId,"192.168.0.2","ROOM-012","uuid","name");
        Bean bean2_1 = new Bean("id21",ip,"ROOM-021","uuid","name");
        Bean bean2_2 = new Bean("id22",ip,"ROOM-022","uuid","name");
        Bean bean3_1 = new Bean("id31","192.168.0.3",roomId,"uuid","name");
        Bean bean3_2 = new Bean("id32","192.168.0.4",roomId,"uuid","name");
 
        HashSet<Bean> beans = new HashSet<>();
        Bean.setCondition(USERID);
        beans.add(bean1_1);
        beans.add(bean1_2);
        beans.add(bean2_1);
        beans.add(bean2_2);
        beans.add(bean3_1);
        beans.add(bean3_2);
 
        beans = printBeans(beans,IP);
        beans = printBeans(beans,ROOMID);
        printBeans(beans,ROOMID);       
     }
 
    private static HashSet<Bean> printBeans(HashSet<Bean> beans,int condition){
        Bean.setCondition(condition);
        HashSet<Bean> result = new HashSet<>();
        System.out.println("Beans size: " + beans.size());
        System.out.println("----------contain-------------");
        Iterator<Bean> iterator = beans.iterator();
        Bean bean = null;
        for(;iterator.hasNext();){
            bean = iterator.next();
            result.add(bean);
            System.out.println(bean);
        }
        System.out.println("------------------------------");
        return result;
    }
     
    public Bean(String userId,String ip,String roomId,String uuid,String name){
        this.userId = userId;
        this.ip = ip;
        this.roomId = roomId;
        this.uuid = uuid;
        this.name = name;
    }
 
    @Override
    public String toString(){
        return String.format("Bean[userId:%s,ip:%s,roomId:%s,uuid:%s,name:%s]",userId,ip,roomId,uuid,name);
    }
 
    public static void setCondition(int value){
        condition = value;
    }
     
    @Override
    public int hashCode(){
        switch(condition){
            case USERID :
                return userId.hashCode();
            case IP :
                return ip.hashCode();
            case ROOMID :
                return roomId.hashCode();
            default :
                return 0;
        }
    }
     
    @Override
    public boolean equals(Object obj){
        if(!(obj instanceof Bean)){
            return false;
        }
        Bean bean = (Bean)obj;
        switch(condition){
            case USERID :
                return userId.equals(bean.userId);
            case IP:
                return ip.equals(bean.ip);
            case ROOMID:
                return roomId.equals(bean.roomId);
            default :
                return true;
        }
    }
    private String userId = null;
    private String ip = null;
    private String roomId = null;
    private String uuid = null;
    private String name = null;
 
    /*----------Constant-----------*/
    public static final int USERID = 1;
    public static final int IP = 2;
    public static final int ROOMID = 3;
    public static int condition = 0;

}