文章目录
九.容器
9.1 Java Collections框架是什么
- 有两大基础接口Collection和Map,他们的作用只是维护一组对象的基础接口而已,其中List,Queue,Set,Stack,都继承Collection
- Set特点:无序不可重复
- LIst特点:有序可重复
- Map特点:存放映射关系的结构,key不可重复,value可重复
9.2 什么是迭代器
- 迭代器是一种用来遍历容器的对象,通过迭代器使得开发人员不用了解容器的底层结构,就可以实现对容器的遍历。
- 常用方法:next,hasNext,remove
- 使用迭代器遍历容器时可能会存在线程安全问题,解决方法可以使用线程安全的容器替换掉线程不安全的容器,也可以将使用迭代器对容器操作的代码放到synchronized代码块中。
9.3 ArrayList、 Vector和LinkedList有什么区别
- ArrayList、 Vector底层用数组实现,擅长随机访问,当需要大量随机查询时考虑使用,两者区别在于,前者是线程不安全的,后者是线程安全的,当然相对的前者性能更强
- LinkedList底层用的是双向链表,擅长插入删除,当需要大量插入删除时考虑使用,LinkedList属于线程不安全的。
9.4 HashMap、 HashTable、 TreeMap和WeakHashMap有哪些区别
- Map接口有三个实现类:HashMap、 HashTable、 TreeMap,用来存放键值对的数据结构
- HashMap、 HashTable两者的区别
- 前者是线程不安全的,后者是线程安全的。
- 前者允许key为空(但最多只能有一条记录的key为空),后者不允许
- 其他暂不做了解
9.5 用自定义作为HashMap或HashTable的key需要注意哪些问题
- HashMap的key是否重复的判断是先使用hashCode()判断对象的哈希值是否相同,若相同再调用所有具有相同哈希值的对象的equals方法判断对象是否相同。
- 两个不同对象可能拥有相同的哈希值,这种现象称为哈希碰撞,HashMap解决哈希碰撞的方法是使用链地址法。
- 使用自定义类作为key值的话,若重写了equals方法,则一定要重写hashCode方法。
9.6 Collection和Collections有什么区别
- 前者是一个总接口,后者属于工具类,不可实例化。