【Java成神之路】Java 中常用的容器有哪些?及基础知识梳理

2022-03-11 09:26:58  晓掌柜  版权声明:本文为站长原创文章,转载请写明出处


一、集合与数组的区分

    ①数组是用来存放对象的容器,他可以存储基本数据类型,长度固定所以不适合在对象未知的情况下进行存储。

    ②可以存储不同的对象类型,长度可变,使用情况较多

二、集合下属的接口和类

    1、list (有序可重复)

        ①list多存放的数据是有序且可重复的。

        ②list在存储的时候关注的是索引,所以在进行查询的时候回比较快

        ③向list中插入数据会伴随着数据的移动,多以数据的掺入及删除会比较慢


    2、set (无序不可重复)

        ①set多存放的数据是无序的且不可重复

        ②集合中的元素不按照顺序排列,只是把数据放入集合中


    3、map (键值对的形式,key唯一,value不唯一)

        ①map中存放数据是以键值对的形式来进行的

        ②key不可以重复,value不可重复

        ③对map进行遍历时会先得到key的set集合,然后根据key的遍历获取指定的value

三、LinkedList 和 ArrayList

        ①都是对list接口的实现,在用法上基本一致

        ②ArrayList是使用数组实现的,实现了动态数组的数据结构,LinkedList是使用链表来实现的

        ③在性能上来说,在随机访问是ArrayList的效率更高,(ArrayList可以根据索引进行查询,LnkedList是线性的数据存储方式,所以要移动指针进行查找)

        ④LinkList多用于增删操作比较多的情况下,ArrayList需要移动数据所以性能后稍差

四、HashMap 和 HashTable

        ①都实现了map接口,但是HashMap可以接收null的key和value 而HashTable不行

        ②HashTable是HashMap的线程安全实现,HashTable是同步的,HashMap不是

        ③在单线程操作中HashMap效率比HashTable高,在多线程操作中,建议使用HashTable

五、集合框架引入泛型有什么好处

        ①JDK1.5之后引入泛型的概念

        ②它可以为集合提供一个容纳对象的对象类型

        ③规范了代码,当你插入了其他类型的数据是会编译时报错--类型转换异常

        ④代码更加简洁不需要进行显示的数据转换了

六、解析HashMap中的hasCode()和equals()

        ①在HashMap中是使用key的hashCode()来进行key-value的对应的

        ②在不允许重复的集合中都是用hash()和equals()来检测重复的

        ③如果 o1.equals(o2); 那么 o1.hash() == o2.hashCode() 为 true;

        ④如果 o1.hashCode() == o2,hashCode(); 并不意味着 o1.equals(o2) 为true

七、java集合的一些使用

        ①根据类型选用。如果指定了大小我们用Array而不是ArrayList,如果想根据顺序来遍历Map则使用TreeMap,如果不想重复就是用ser

        ②一些集合类允许指定初始容量,如果我们能很好的预估元素的存储数量那么就会避免集合重新Hash或者动态扩容

        ③使用类型安全的泛型

        ④一切从实际着手

八、各自的一些特性

    1、集合:单列结合和双列结合,单列结合有列表中,设置双列结合有地图

        ----- list:有序存储,可以重复,添加是执行add()方法,当重复添加时是多个索引执行同一个对象,同时列表可以指定位置添加,add(int index)。获取指定位置的元素get(int index)。

        ------ ArrayList的:数组实现,查找快,增删慢:由于是数组实现,在增删是牵涉到数组的增容以及拷贝元素,所以慢因为是可以直接按索引进行查找的所以检索的时会快一点。

        -------链表:链表的形式体现的,增删快,查找慢链表的形式实现机制使得在增加时只要让前一个元素记住自己,删除时让豁免一个元素记住自己就行。但是在查询的时候要进行遍历,所以查询的会慢。

        -------矢量:和ArrayList的原理相同,但线程安全的只是效率低。

        --------组:无序的,不可重复.SET在判定是否重复的时候是调用的等于方法,如果已经存在一个元素A,那么在插入一个与一个的rquals方法为真实的乙是返回的布尔值为FALSE,无法添加。

        ------ HashSet的:线程不安全,底层是以哈希表实现的,存取速度快。

        ------- TreeSet中:树形数据结构,默认对元素进行排序。

    2、集合:双列集合,地图:已键值对的形式来进行存储。关键是唯一的,不可重复,值可以重复。

        ------ HashMap的:底层是以哈希表实现的,存取速度快,线程不安全。

        ------ TreeMap中:树形结构,默认对元素进行排序。

        ------哈希表:底层也是用了哈希表,存取的速度快,储存的元素是无序的。

九、拓展

    

    


最新评论: