主要带大家了解一些常用的集合。
首先通过一副思维导图了解一下:
1.List集合
2.Set集合
3.Map集合
1.ArrayList和LinkedList的区别?
继承自 | List | |
ArrayList | LinkedList | |
优点 | 查询速度快 | 添加和删除速度快 |
缺点 | 添加和删除速度慢 | 查询速度快 |
注:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构。
2.对于随机访问的get和set方法,ArrayList要优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
2.Conllection接口的remove()方法和Iterator的remove()方法有什么区别?
(1)性能方面
Conllection的remove()方法必须找到被删除的项,但是找到该项的位置需要一个一个遍历集合,因此有点影响性能
Iterator的remove()方法必须结合hasNext()方法和Next()方法配合使用,当Next()有下一个时,可执行remove()方法
(2)容错方面
使用Iterator遍历时,如果使用Conllection的remove()会抛异常——ConcurrentModificationException,因为集合中的对象个数会改变Iterator的内部对象个数。当不一致时会出现——ConcurrentModificationException。
当使用Iterator.remove()就不会报错。
3.Array和ArrayList有什么区别?
Array是JAVA中的数组,长度是固定的,只能存储同一种数据类型的数据
ArrayList是动态数组,同时也是Array的复杂版本,长度是可变的,可以存储不同数据类型的数据
4.怎么样将一个数组转成List?
将一个数据转成集合的方法有很多中:
下面小编给大家介绍两种:
方法一:
通过 Arrays.asList(strArray)
方式,将数组转换List后,不能对List增删,只能查改,否则抛异常。
关键代码:List list = Arrays.asList(strArray);
方法二:
通过ArrayList的构造器,将Arrays.asList(strArray)的返回值由java.util.Arrays.ArrayList转为java.util.ArrayList。
关键代码:ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ;
5.HashSet、TreeSet、LinkedHashSet有什么区别?
父类 | Set | ||
子类 | HashSet | TreeSet | LinkedHashSet |
优点 | 速度快 | 拥有排序的功能 | 按照插入的顺序存储集合 |
6.HashMap、TreeMap、LinkedHashMap有什么区别?
父类 | Map | ||
子类 | HashMap | TreeMap | LinkedHashMap |
优点 | 在Map中插入、删除和定为元素 HashMap是最好的选择 | 拥有排序的功能 | 按照插入的顺序存储集合 |
7.HashMap和HashSet的区别?
HashMap | HashSet |
实现了Map接口 | 实现了Set接口 |
存储键值对 | 存储对象 |
调用put()向map中添加元素 | 调用add()向set中添加元素 |
HashMap使用key计算hashcode | HashSet使用成员对象计算Hashcode |
HashMap相对于HashSet比较快 因为他是使用唯一的键获取对象 | HashSet较HashMap来说比较慢 |
8.HashMap的实现原理?
简单来说,HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。
9.List、Set、Map之间的区别?
List | Set | Map |
可以允许添加重复的元素 | 不允许添加重复的元素 | 键值对存储数据,但是值一定要唯一 |
可以插入多个Null元素 | 只允许插入一个Null值 | 键只允许一个Null值,值可以允许多个Null值 |
有序的容器,存进去和取出来的顺序一样 | 无序容器 | 无序容器 |