Java集合的区别和选择
1.List 有序,可重复
ArrayList:底层数据结构是数组,查询快,增删慢。线程不安全,效率高
Vector:底层数据结构是数组,查询快,增删慢。线程安全,效率低
LinkedList:底层数据结构是链表,查询慢,增删快。线程不安全,效率高
2.Set 唯一(Set判断两个对象相同是根据equals方法)
HashSet:底层数据结构是哈希表。 无序唯一,如何保证元素唯一性的呢?依赖两个方法:hashCode()和equals()开发中自动生成这两个方法即可
LinkedHashSet:底层数据结构是链表+哈希表,有序(插入顺序)唯一,由链表保证元素有序,由哈希表保证元素唯一
TreeSet:底层数据结构是红黑树。有序(元素升序)唯一,如何保证元素排序的呢?自然排序比较器排序 如何保证元素唯一性的呢?根据比较的返回值是否是0来决定
3.Map 键值对
HashMap:底层是哈希表数据结构,无序,最多只允许一条记录的键为Null;允许多条记录的值为 Null,线程不安全
Hashtable:不允许记录的键或者值为空,线程安全
LinkedHashMap:按照记录的插入顺序,
TreeMap:底层是二叉树数据结,按照键排序,默认是按键值的升序排序,线程不安全
//排序 Iterator it = hsMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry) it.next(); System.out.println("Key: " + e.getKey() + "--Value: " + e.getValue()); }
keySet是键的集合,Set里面的类型即key的类型
entrySet是 键-值 对的集合,Set里面的类型是Map.Entry
使用entrySet则必须将map对象转换为Map.Entry,keySet则不需要