(五)集合处理

来源:互联网 发布:入门红酒 知乎 编辑:程序博客网 时间:2024/05/29 16:42

1:关于hashCode和equals的处理,遵循如下规则

    1:只要重写equals,就一定要重写hashCode的方法。因为equals相等,那么hashCode一定相等。但是如果equals不相等,hashCode也有可能相等,个人理解可能是因为hash冲突导致的。

    2:Set集合存储的是不重复的对象,所以依据hashCode和equals来进行判断,这就要求Set存储的对象必须要重写这两个方法。

    3:如果自定义对象作为Map的对象,则该对象必须实现hashCode和equals方法。String重写了hashCode和equals方法,所以我们可以非常愉快的使用 String对象来作为key来使用。

2:ArrayList的subList结果不可以强转成ArrayList,否则会抛出ClassCastException异常。

    import java.util.ArrayList;
import java.util.List;


public class TestSubList {


public static void main(String[] args) {
List<Integer> test = new ArrayList<Integer>();
//init list
for (int i = 0; i < 5; i++) {
test.add(i); //auto boxing
}
//display the list
System.out.print("the orginal list: ");
for (int i = 0; i < test.size(); i++) {
System.out.print(test.get(i) + " ");
}
System.out.println();

//sub list
List<Integer> sub = test.subList(1, 3);//sub list contains elements: 1, 2
sub.remove(1);//remove element “2” from sub list

//display the list again
System.out.print("the orginal list after sublist modified: ");
for (int i = 0; i < test.size(); i++) {
System.out.print(test.get(i) + " ");
}
System.out.println();
}


}

在这段代码中,我们并没有改变原始列表“test”其中的元素。然而,当删除由subList方法得到的子列表中的元素时,原始列表中的该元素也被删除了。

3:在subList场景中,高度注意对原集合元素个数的修改,会导致自列表的遍历,增加,删除均会产生ConcurrentModificationException异常。

4:使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的是类型完全一样的数组,大小就是list.size()。

5:使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,他的add/remove/clear方法会抛出UnsupportedOperationException异常。

6:泛型通配符<? extends T>来接受返回的数据,此方法的泛型集合不能使用add方法,而<? super T>不能使用get方法,作为接口调用赋值时易出错。

7:不要在foreach循环里进行元素的remove/add操作。remove元素请使用Itrator方式,如果并发操作,需要对Iterator对象加锁。

8:在jdk7版本以上,Comparator要满足三个条件,不然Arrays.sort,Colletions.sort会报IllegalAgumentException异常。

    1:x,y的比较结果与y,x的比较结果相反

    2:如果x>y,y>z那么x>z。

    3:x=y,那么z与x的比较结果与z与y的比较结果相同。

9:集合初始化时指定集合的初始化大小。

10:推荐使用entrySet遍历Map类集合KV,而不是entrySet方式遍历集合。

11:高度注意map类集合K/V能否为空的各种情况

    Hashtable    key不允许为null    value不允许为null    super是Dictionary    线程安全

    ConcurrentHashMap    key不允许为null    value不允许为null    super是AbstractMap    锁分段技术

    TreeMap    key不允许为null    value允许为null    super是AbstractMap    线程不安全

    HashMap    key允许为null    value允许为null    super是AbstractMap 线程不安全

12:合理利用好集合的有序性和稳定性,避免集合的无序性和不稳定性带来的负面影响。

13:利用Set集合唯一的特性,可以快速对一个集合进行去重 操作,避免使用List的contains方法进行遍历,对比,去重操作。

原创粉丝点击