Java必知必会--集合篇基础解析

2019-03-06 05:31:40  卢浮宫  阅读量:137  版权声明:本文为站长原创文章,转载请写明出处


一、集合与数组的区分

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

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


二、集合下属的接口和类

    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或者动态扩容

        ③使用类型安全的泛型

        ④一切从实际着手

最新评论: