2.集合处理

一.集合处理

1.只要重写equals就必须重写hashCode

  • Set存储的对象会根据hashCode和equals进行判断

  • Map的键如果是对象也必须重写

  • String已经重写了hashCode和equals对象,所以可以利用String作为Map的键

  • 一般我们遵守equals相等hashCode必须相同,而hashCode相同equals不一定相同

2.ArrayList的subList结果不可以强转成ArrayList,否则会报错。由于subList返回的是ArrayList的内部类SubList,并不是ArrayList而是ArrayList的一个视图,对于SubList自列表的所有操作最终会反映到列表上

3.集合转数组方式,避免强制类型转换,使用toArray(T[] array)方法而不是toArray()

标准写法:

String[] array = new String[list.size()];
list.toArray(array);

错误写法:

  • 不能把Object[]转为任意类型数组,只能一个一个转

4.使用工具类Arrays.asList()把数组转换成集合是,不能使用集合的相关方法否则报错,asList返回对象是一个Arrays的内部类,并没有实现集合的方法。

5.不要在foreach循环里进行remove/add操作,使用Iterator方式进行操作,如果是并发的需要加锁。

由于使用remove/add操作会是原数据移动,foreach是拿下标进行遍历,Iterator是拿到地址。

错误示例:

 

 正确示例:

 

 6.使用entrySet遍历Map类集合KV,而不是keySet方式遍历。由于keySet遍历2次,第一次转化为iterator,第二次从中取key对应的value。而entrySet遍历一次效率高,推荐使用Map的foreach方法

7.Map类集合K/V能不能存储null值情况

 

集合类

Key

Value

Super

说明

Hashtable

不允许为 null

不允许为 null

Dictionary

 线程安全

ConcurrentHashMap

 不允许为 null

不允许为 null

AbstractMap

锁分段技术(JDK8:CAS)

TreeMap

 不允许为 null

允许为 null

AbstractMap

线程不安全

HashMap

允许为 null

允许为 null

AbstractMap

线程不安全

 

posted @ 2020-03-05 23:25  All_just_for_fun  阅读(131)  评论(0编辑  收藏  举报