Collection && Map集合(容器)总结

  • 常用集合图录

  • List 接口的实现类
    • ArrayList
      • ArrayList 底层采用数组来存储元素,当数组满的时候,需要对数组进行扩容,会生成一个新的数组,新的数组大小为原数组大小的1.5倍,会比较慢。然后将老的数据复制到新的数组中,这个需要一定的时间,如果扩容之后只新增了一个元素,此时可能会造成一些空间的浪费。
      • 非线程安全
    • LinkedList
      • LinkedList 底层采用双向链表来存储元素,所以追加元素的时候,只需要将最后一个元素next指针指向新的元素就可以了,非常的快。
      • 非线程安全 
    • Vector
      • Vector与ArrayList一样,也是通过数组实现的
      • Vector是线程安全的,同步需要更高的花销,效率上比ArrayList会慢些
      • 如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而arraylist增长率为目前数组长度的50%.如果在集合中使用数据量比较大的数据,用vector有一定的优势
    • Stack
      • 继承自Vector,拥有栈先进后出,无法使用下标等特性
  • Queue的接口实现类

    • Priority Queue优先级队列

      • 会自动帮忙排序

  • Set接口实现类

    • Hashset

      • 唯一,无序 

      • HashSet是哈希表结构,主要利用HashMap的key来存储元素,计算插入元素的hashCode来获取元素在集合中的位置;

      • 底层由HashMap(后面讲解)来实现,为哈希表结构,新增元素相当于HashMap的key,value默认为一个固定的Object。在我看来,HashSet相当于一个阉割版的HashMap;

      • 由于Set集合中并没有角标的概念,所以并没有像List一样提供get()方法。当获取HashSet中某个元素时,只能通过遍历集合的方式进行equals()比较来实现

      • 线程不安全,若2个线程同时操作HashSet,必须通过代码实现同步;

    • TreeSet

      • 唯一,有序

      • TreeSet是红黑树结构,每一个元素都是树中的一个节点,插入的元素都会进行排序;

      • 线程不安全

  • Map接口实现类

    •  HashMap

      • 线程不安全

      • Map 在 Java 中表示为键值对存储结构 Map<K,V>,

      • 首先有一个每个元素都是链表(可能表述不准确)的数组,当添加一个元素(key-value)时,就首先计算元素key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了,这时就添加到同一hash值的元素的后面,他们在数组的同一位置,但是形成了链表,同一各链表上的Hash值是相同的,所以说数组存放的是链表。而当链表长度太长时,链表就转换为红黑树,这样大大提高了查找的效率

      • 遍历方法:entries, for, Iterator

    • ConcurrentHashmap

      • jdk7采用分段锁segment 来实现线程安全,jdk8后使用synconize

    • HashTable

      • 使用全局锁synconize线程安全

    • TreeMap

      • 主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值