1.Map接口下有几个子类,各自有什么特点?
HashMap:底层是一个哈希表,存取无序,不能存储重复元素
LinkedHashMap:底层是一个哈希表+链表,存取有序,不能存储重复元素
HashTable:底层是一个哈希表,存取无序,不能存储空键和空值,且是不同步的,效率较低,在JDK1.2之后被HashMap取代
2.目前为止,我们所学的遍历map集合有几种方式?
有两种方式,
a.使用keySet()方法获取键的集合,通过遍历键的集合同时通过get()获取对应值来遍历map
b.使用entrySet()方法获取包含所有键值对的集合,再遍历键值集合,使用entry对象的getKey()和getValue()方法来遍历map
3.
Collection集合
List接口
ArrayList底层是一个数组, 增删时是新创建一个数组, 速度较慢
LinkedList底层是一个链表结构, 查询慢, 增删快
Vector早期版本jdk使用, 但是单线程的, 特点是速度较慢, 但安全
Set接口
不能用fori遍历, 存储的内容是不重复的
HashSet底层是一个哈希表, 查询速度快, 数据存取的顺序不一致(只是存取的顺序不一致,但打印时会按对象哈希值(一般是升序)排序)
LinkedHashSet 是HashSet的子类, 底层是哈希表+链表, 存取顺序一致
Map集合
HashMap: 底层是一个哈希表, 查询速度很快, 无序集合, 存取顺序不一致
LinkedHashMap: 底层是哈希表+链表, 存储元素和取出元素的顺序一致
Hashtable: 底层是一个哈希表, 但不能存储空值和空键, 在JDK1.2版本后被HashMap取代,是一个不同步(线程安全)的集合, 其子类Properties集合仍在使用, 是唯一一个和IO流相结合的集合
引用类型作为键时, 要求重写HashCode和equals方法
|