java集合概览
2019-06-08 本文已影响2人
ffxxbb5
集合家族继承实现图 企业微信截图_20190608160845.png
List
List是有序的Collection.Java List一共三个实现类:ArrayList,Vector和LinkedList
1.ArrayList(数组):内部是通过数组实现的,允许对元素进行快速随机访问。
- 缺点:每个元素之间不能有间隔,当数组大小不能满足时需要增加存储能力,就要将已有的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制,移动,代价比较高。
- 适合随机查找和遍历,不适合插入和删除。
2.Vectoor(数组实现,线程同步):也是通过数组实现的,不同的是他支持线程的同步,即某一刻只有一个线程能够写Vector,但实现同步需要很高的花费。
- 访问比ArrayList慢
3.LinkList(链表):是用链表结构存储数据的
- 很适合数据的动态插入和删除,随机访问和遍历速度比较慢。还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈,队列和双向队列使用。
Set
Set用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。
对象的相等性本质是对象的hashCode值(java是依据对象的内存地址计算出的此序号)判断的,如果想要让两个不同的对象视为相等的,就必须覆盖Object的hashCode的方法和equals方法。
1.HashSet:
- HashSet存储的是哈希值。HashSet存储元素的顺序不是按照存入时的顺序,而是按照哈希值来存的,所以取数据也是按照哈希值取的。
- HashSet首先判断两个元素的哈希值,如果一样,再比较equals方法,结果为true,即视为同一个元素。
- 哈希值相同 equals为false的元素,就是在同样的哈希值下顺延(可以认为哈希值相同的元素放在一个哈希桶中)
- HashSet通过hashCode值来确定元素在内存中的位置,一个hashCode位置可以存放多个元素.
2.TreeSet(二叉树)
- TreeSet是使用二叉树的原理对新add()的对象按照指定的顺序排序(升序,降序),每增加一个对象都会进行排序,将对象插入二叉树指定的位置。
- Integer和String对象都可以进行默认的TreeSet排序,而自定义类的对象是不可以的,自定义的类必须实现Comparable接口,并且覆写相应的compareTo()函数。
- 在覆写compare()函数时,要返回相应的值才能使TreeSet按照一定的规则来排序。
3.LinkHashSet(HashSet+LinkedHashMap)
- 继承HashSet,又基于LinkEdHashMap来实现的。
- 底层使用LinkedHashMap来保存所有元素,继承hashSet,所以其所有方法操作上又与hashSet相同。