java集合概览

作者: ffxxbb5 | 来源:发表于2019-06-08 16:10 被阅读2次

    集合家族继承实现图 企业微信截图_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相同。

    相关文章

      网友评论

        本文标题:java集合概览

        本文链接:https://www.haomeiwen.com/subject/zvvixctx.html