zoukankan      html  css  js  c++  java
  • Java集合学习--集合总结

    一、ArrayList与Vector

    ArrayList与Vector很多地方大同小异,Vector现在已经基本不再使用。具体的管理如下:
    1.ArrayList与Vector都实现了List接口,底层都是基于动态数组实现。

    2.ArrayList与Vector底层数组初始大小均为10。

    3.ArrayList非线程安全,Vector中方法都是synchronized方法,进行了同步处理。

    4.ArrayList扩容机制是扩大为原来的1.5倍,Vector扩容,默认扩大为原来的2倍。

    二、HashMap与HashTable

    1.均实现Map接口,底层主要数据接口是散列表,hash冲突的时候处理方式都是链表,但是HashMap在1.8后进行大量的优化,引入红黑树。

    2.HashMap的初始容量大小为16,加载因子为0.75,HashTable默认初始容量为11,默认加载因子为0.75
    Hashtable不要求底层数组的容量一定要为2的整数次幂,而HashMap则要求一定为2的整数次幂。

    3.Hashtable中key和value都不允许为null,而HashMap中key和value都允许为null

    4.HashMap的扩容机制是扩大为原来的2倍,HashTable扩大为原来的2倍+1;

    5.确定一个键值对在散列表中的位置,HashTable是 int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length;即将hash值转正值后进行length的取模
    HashMap是int hash = key.hashCode()) ^ (h >>> 16);int i = (n - 1) & hash

    三、ArrayList与LinkedList

    1.均实现List接口,都非线程安全。
    2.ArrayList实现RandomAccess接口,支持快速查找和二分查找,LinkedList实现Deque接口,可用作队列。
    3.底层实现不同,ArrayList主要是借助动态数组实现,LinkedList则是双向链表。
    4.ArrayList扩容,扩大为原来的1.5倍,LinkedList则不需要进行扩容,在内存足够的前提下,容量不限。
    5.对比与LinkedList,ArrayList的查找效率高,插入删除效率不足。

    四、HashMap,LinkedHashMap,TreeMap

    1.均实现Map接口,存储键值对。均非线程安全
    2.LinkedHashMap继承HashMap,具有HashMap的所有特性,同样允许key和value为null。底层实现主要是散列表,链表,红黑树;TreeMap主要是通过红黑树实现。
    3.HashMap是无序的,LinkedHashMap通过一个双向链表维护key-value的插入顺序,TreeMap默认是根据key的字典顺序升序排序。
    4.TreeMap的查询、插入、删除效率均没有HashMap高,一般只有要对key排序时才使用TreeMap
    5.TreeMap的key不能为null,而HashMap和LinkedHashMap的key可以为null。

    五、HashSet、LinkedHashSet和TreeSet

    1.Hashset的实现借助HashMap
    public HashSet() {
    map = new HashMap<>();
    }
    2.LinkedHashSet的底层实现是LinkedHashMap

    3.TreeSet的实现基于TreeMap
    public TreeSet() {
    this(new TreeMap<E,Object>());
    }
    set相当于是只存储了key的Map,理解了Map的相关实现类,set的相关实现类水到渠成。

  • 相关阅读:
    A1023 Have Fun with Numbers (20分)(大整数四则运算)
    A1096 Consecutive Factors (20分)(质数分解)
    A1078 Hashing (25分)(哈希表、平方探测法)
    A1015 Reversible Primes (20分)(素数判断,进制转换)
    A1081 Rational Sum (20分)
    A1088 Rational Arithmetic (20分)
    A1049 Counting Ones (30分)
    A1008 Elevator (20分)
    A1059 Prime Factors (25分)
    A1155 Heap Paths (30分)
  • 原文地址:https://www.cnblogs.com/liupiao/p/9372988.html
Copyright © 2011-2022 走看看