集合

集合分为list,set,map。list和set接口继承collection。

List

list有三个实现类ArrayList、LinkedList和Vector,有序,可重复;

ArrayList

ArrayList线程不安全,可以存重复的值以及null,保证存入和取出的顺序,底层是一个数组,ArrayList的查询和修改的效率很高,但是新增,删除和插入的效率就比较低,比如说头插就会涉及到大量的数组移动,扩容的化也会涉及到数组的复制,效率很低。并且要提前就要分配一段内存,会造成内存的浪费。

LinkedList

LinkedList线程不安全,可以存入重复的值以及null,保证存入和取出的顺序,底层是链表结构。LinkedList插入和删除效率很高,插入的话是直接将地址存入上一个节点,自己保存下一个节点的地址,删除是直接将下一个节点地址给上一个节点。但是,查询效率很低,要么是从头开始查询。要么是从尾部开始查询。

Vector

Vector就是一个线程安全的ArrayList,底层对很多方法都加了synchronized。像addElement就加了同步。

Set

Set有三个实现类HashSet和TreeSet,LinkedHash。

HashSet

HashSet 底层是HashMap的key,非线程安全的。存值的效率很高,存入的对象必须重写hashcode和equals,底层是通过hashcode确定在数组中存放的位置,用equals判断是否重复。

TreeSet

TreeSet是线程不安全,无序的(不保证存入和取出的顺序)不可重复的,但是可以对里面的对象进行排序,对象必须实现hashcode和equals,底层是TreeMap,而且对象要么实现comparable接口,或者传入比较器,comparator的实现类。

LinkedHashSet

LinkedHashSet是线程不安全,有序不可重复的,就是保证存入和取出的顺序,底层维护了一个链表来保证存入和取出的顺序。

Map

Map接口有两个重要的实现类,HashMap和TreeMap,以及ConcurrentHashMap,HashTable(前两者线程不安全后两者线程安全)。
还有一个LinkedHashMap。
Properties主要用来读取配置文件。

HashMap

HashMap底层是基于数组链表和红黑树(1.8之后),存放的是Key-Value,可以以null为key,null是存放在数组的头部。链表长度大于8后会优化为红黑树,红黑树节点小于6会优化为链表。
存值过程:首先会判断数组是否存在,不存在就创建一个,再根据key的Hash值,和数组的长度取位运算,获得key再数组中存放的位置,如果发生了hash碰撞就会调用equals判断key是否相等,并且会遍历红黑树和链表,如果存在相同的key会返回旧的值。

TreeMap

TreeMap是线程不安全的,底层对key会进行排序,传入的key,必须实现hashcode和equals以及comparable或者传入比较器,comparator,

HashTable

HashTable是线程安全的HashMap,底层对put用了同步。不可以存null。效率没有CurrentHashMap高,CurrentHashMap是对put用了局部 同步。

LinkedHashMap

保证key的存入和取出的顺序的HashMap。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值