集合的总结:

Java集合只要分为Collection(单列)和Map(双列)这两个接口:

Collection子接口中又包含了List和Set等

        List是有序可重复集合、Set是无序不可重复集合、Map是存储key-value对的集合

常用的集合包括:ArrayList、LinkedList、Vector、HashSet、LinkedHashSet、TreeSet、HashMap、HashTable、LinkedHashMap、Properties、TreeMap等

List:(有序的、可重复、有索引)

ArrayList:

结构特点:

        底层为数组、可为Null且可重复、线程不安全(执行效率高)多线程不建议

扩容机制:

        1、若为无参构造器,初始为0,第一次扩容到10,后扩容*1.5

        2、若为有参构造器,初始为设定的值,后扩容*1.5

Vector:

结构特点:

        底层为数组、可为Null且可重复,等同于ArrayList,但线程是安全的

扩容机制:

        1、若无参构造器,初始为10,满后2倍扩容

        2、若有参构造器,初始为设定的值,满后2倍扩容

LinkedList

结构特点:

        底层为双向链表、可为Null且可重复,线程不安全

        维护了两个属性first和last分别指向首节点和尾节点

        每个节点(Node对象),里面又维护了prev、next、item三个属性,其中通过prev指向前一个,通过next指向后一个节点,最终实现双向链表。添加和删除的效率高。

Set:(无序、不可重复、一个Null、无索引)

HashSet

结构特点:

        底层为HashMap(数组+链表+红黑树)、无序、不可重复、一个Null

        添加元素先得到hash值会转成->索引值,找到存储数据表table,看这个索引的位置是否有元素,如果没有,直接加入;如果有,调用equals比较,如果相同则放弃,如果不同,则添加到最后(链表)

        在java8中,如果一条链表的个数到达8个,并且table的大小达到64,就会进行树化(红黑树)、在java7是(数组+链表),java8改动因为数据多操作会慢,树化操作快

扩容机制:

        第一次添加,则需要扩容table容量为16,临界值为容量的0.75(12)

        以后,若table的size到达临界值则进行下一次扩容,容量*2,临界值*2

LinkedHashSet:

结构特点:

        底层为LinkedHashMap(哈希表+双向链表)、不可重复、一个Null、有序

        根据元素的HashCode值来决定元素的存储位置,同时使用链表维护元素的次序

        添加元素先得到hash值会转成->索引值,找到存储数据表table,看这个索引的位置是否有元素,如果没有,直接加入;如果有,调用equals比较,如果相同则放弃,如果不同,则添加到最后(链表)

扩容机制:

        创建对象后,添加第一次时,直接将数组table表扩容到16

TreeSet

结构特点:

        底层为TreeMap(红黑树)、线程不安全

        无参构造是为无序、有参构造可以传入一个比较器(匿名内部类)并指定排序规则

Map:(Key-Value(双列)、Key不能重复、重复则覆盖、V可以、Key一个Null、V多个

HashMap

结构特点:

        底层为(数组+链表+红黑树)、无序、Key不可重复、Key一个Null、Value可以为多个、线程不安全

        添加元素先得到hash值会转成->索引值,找到存储数据表table,看这个索引的位置是否有元素,如果没有,直接加入;如果有,调用equals比较,如果相同则放弃,如果不同,则添加到最后(链表)

        在java8中,如果一条链表的个数到达8个,并且table的大小达到64,就会进行树化(红黑树)、在java7是(数组+链表),java8改动因为数据多操作会慢,树化操作快

扩容机制:

        第一次添加,则需要扩容table容量为16,临界值为容量的0.75(12)

        以后,若table的size到达临界值则进行下一次扩容,容量*2,临界值*2

HashTable

结构特点:

        底层为(Hashtable$Entry[]数组)、无序、Key不可重复、Key只能一个Null、Value可以为多个、线程安全

扩容机制:

        初始大小11,临界值为容量的0.75(8)

        后>=临界值时进行扩容,容量=容量*2+1(第一次11*2+1=23)

LinkedHashMap

结构特点:

        底层为(哈希表+双向链表)、不可重复、一个Null、有序、线程不安全

        根据元素的HashCode值来决定元素的存储位置,同时使用链表维护元素的次序

        添加元素先得到hash值会转成->索引值,找到存储数据表table,看这个索引的位置是否有元素,如果没有,直接加入;如果有,调用equals比较,如果相同则放弃,如果不同,则添加到最后(链表)

扩容机制:

        创建对象后,添加第一次时,直接将数组table表扩容到16

Properties

结构特点:

        底层为(数组)继承了HashTable类和HashTable类似、Key不可重复、Key只能有一个Null、Value可以为多个

        Properties还可以从xxx.properties文件进行读取并修改

TreeMap

结构特点:

        底层为(红黑树)、线程不安全

        无参构造是为无序

        有参构造可以传入一个比较器(匿名内部类)并指定排序规则

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值