数据结构 - JAVA集合框架总结

涉及到的数据结构

  数组,链表(双向循环链表),哈希表,红黑数

java集合框架中的接口特点

  List (有序 可重复) Map (键唯一 值可重复) Set(无序 不可重复)

ArrayList

  1 底层实现 数据结构是数组 (查询快,增删慢)

  2 线程安全 线程不安全,效率高

  3 扩容机制 初始为10,当容量不够时,ArrayList是当前容量*1.5+1

Vector 

  1 底层实现 数据结构是数组 (查询快,增删慢)

  2 线程安全 线程安全,效率低 Vector的操作方法上加上了同步关键字

  3 扩容机制 初始为10,当容量不够时,默认扩展一倍容量 

LinkedList

  1 底层实现 双向循环链表 (查询速度慢,增删快)

  2 线程安全 线程不安全,效率高

  3 无初始大小,无扩容机制

HashMap

  1 底层实现 哈希表 

  2 线程安全 线程不安全 效率高

  3 扩容机制 初始为16,增长因子0.75 

LinkedHashMap 

  1 底层实现 哈希表 + 链表 

    1.1 由链表保证元素有序,由哈希表保证元素唯一

Hashtable

  1 底层实现 哈希表 

  2 线程安全 线程安全,效率低 Hashtable的操作方法上加上了同步关键字   

  3 扩容机制 默认为11 增长因子0.75

  

TreeMap

  1 底层实现 红黑数 支持排序和键唯一

  2 线程安全,线程不安全

HashSet

  1 底层实现 使用哈希表实现(HashMap) 

  2 线程安全 线程不安全

  3 扩容机制 初始容量16,加载因子0.75

TreeSet 

  1 底层实现 基于TreeMap

  2 线程安全 线程不安全

LinkedHashSet

  1 底层实现 基于linkedHashMap

  2 线程安全 线程不安全

问题解答

  1 哈希表如何保证键唯一 (主要依赖于两个方法hashCode()和equals())

    首先判断hashCode()值是否相同 否 直接添加到集合 是 继续判断eauls() 看其返回值 是true:说明元素重复,不添加,是false:就直接添加到集合

  2 TreeMap是否如何保证元素唯一和排序的 

    2.1 排序 要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo() 方法,当插入元素时会回调该方法比较元素的大小

    2.2 唯一 根据排序去遍历树,查询有没有相同的节点,如果没有返回null,已有的话,就替换树

 

集合选型参考

  1 键值对象形式(Map)

    1.1 需要排序 TreeMap

    1.2 不需要排序 hashMap (常用)

  2 非键值对象形式(Collction)

    2.1 元素唯一 Set

      2.1.1 元素需要排序 TreeSet

      2.1.2 元素不需要排序 HashSet (常用)

    2.2 元素不唯一 List

      2.2.1 需要线程安全 Vector  

      2.2.2 增删多 LinkedList

      2.2.3 查询多 ArrayList (常用)  

 

  

 

 

猜你喜欢

转载自www.cnblogs.com/hpzhu/p/9134030.html