欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java判断一个值,或者对象是否存在list集合中和去掉list集合中重复的元素

程序员文章站 2022-06-10 18:30:55
...

1、判断对象是否存在于list集合中
用list的contains方法,即list.contains(object),返回的是boolean值。
2、去掉list集合中重复的元素
方法一:循环元素删除

public static void removeDuplicate(List list) {    
        for ( int i = 0  i < list.size() - 1  i ++ ) {      
            for ( int j = list.size() - 1  j > i; j -- ) {        
                if (list.get(j).equals(list.get(i))) {         
                    list.remove(j);        
                }      
             }     
        } 
            System.out.println(list); 
    }

或者

public static void removeDuplicate(List list) {    
        List<object> list1 = new ArrearyList<object>();
        for ( int i = 0  i < list.size() - 1  i ++ ) {      
            if(!list1.contains(list.get(i))){               
            list1.add(list.get(i))
        } 
            System.out.println(list); 
    }

方法二:通过HashSet剔除

public static void removeDuplicate(List list) {       
    HashSet h = new HashSet(list);       
    list.clear();       
    list.addAll(h); 
    System.out.println(list); 
}

一开始用过这个方法,但是因为需要的是不改变集合里对象的顺序,set集合是无序的,也就是说他会打乱你之前list集合中的顺序,所以按照自己需要的进行选择。

方法三: 删除ArrayList中重复元素,保持顺序

public static void removeDuplicateWithOrder(List list) {    
    Set set = new HashSet(); 
    List newList = new ArrayList(); 
    for (Iterator iter = list.iterator(); iter.hasNext();) {           
        Object element = iter.next();           
        if (set.add(element)) {
             newList.add(element);
        }                        
    } 
      list.clear(); 
      list.addAll(newList); 
}
这个方法类似与方法一中我改进的那个方法。

说明:判断两个对象相等是否要重写equals 和hashcode方法
首先说建议的情况:比如你的对象想放到Set集合或者是想作为Map的key时,那么你必须重写equals()方法,这样才能保证唯一性。当然,在这种情况下,你不想重写hashCode()方法,也没有错。但是,对于良好的编程风格而言,你应该在重写equals()方法的同时,也重写hashCode()方法。
必须重写hashCode()的情况:
如果你的对象想放进散列存储的集合中(比如:HashSet,LinkedHashSet)或者想作为散列Map(例如:HashMap,LinkedHashMap等等)的Key时,在重写equals()方法的同时,必须重写hashCode()方法。
最后明白两点就行了:
1.hashCode()方法存在的主要目的就是提高效率。
2.在集合中判断两个对象相等的条件,其实无论是往集合中存数据,还是从集合中取数据,包括如果控制唯一性等,都是用这个条件判断的,条件如下:
首先判断两个对象的hashCode是否相等,如果不相等,就认为这两个对象不相等,就完成了。如果相等,才会判断两个对象的equals()是否相等,如果不相等,就认为这两个对象不相等,如果相等,那就认为这两个对象相等。
上面的条件对于任何集合都是如此,只要理解上面的条件,你就明白了,为什么在有些情况下建议重写hashCode().有些情况下,是必须要重写的,只有一个目的,就是提高效率,你想想,如果你重写了hashCode(),只要不满足第一个条件,那就直接可以判断两个对象是不等的,也就不用花费时间再去比较equals了。
最后总结一句话就是,hashCode()方法存在的主要目的就是提高效率,但是如果你想把对象放到散列存储结构的集合中时,是必须要重写的。