java面试总结09_collection集合和Map

网上有很多collection和map的区别,这里就不在重复,这里只写个别需要注意的。

归类一下:

一:Collection

1.set和list的区别

HashSet和ArrayList 主要是两条,①set是无序的,list是有序的,②set不可以重复,list可以重复

问题来了,怎么理解set是无序的?明明set中的元素是按照大小顺序输出的,怎么就是无序的呢?

这里要说明一下,无序或者说有序,是以用户的意志为主的,而不是以输出的顺序为主的。

举个例子:

用户输入:分别在list和set中存入 9,2,8,5,3,2,1,list打印出来的结果是:9,2,8,5,3,2,1 ,set 打印出来的结果是: 1,2,3,5,8,9

list 的数据是按照用户输入的顺序存储的,所以是有序的,set数据不是按照用户输入的顺序存储的,所以是无序的。

ArrayList和LinkedList 区别(可参考):

首先:它们两个都是线程不安全的,其次,两者都可以存null,并且可以存多个null;

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

HashSet和TreeSet区别:hashSet可以存一个null,而TreeSet不允许存null,TreeSet可以定制排序

二、Map

HashTable   是线程安全的,不能存储   null   值     ,key也不能为null

HashMap   不是线程安全的,可以存储   null   值 ,key也可以是null

ConcurrentHashMap 也是线程安全的,效率高于HashTable,也不能存null

TreeMap 可以自定义排序

list遍历时操作list,出现异常ConcurrentModificationException

三 、容量大小和扩容

arraylist 1.7中 无参构造默认容量是0 ,开始添加数据的时候默认为10,超过10,则默认扩大1.5倍(实际上是>>位运算符往右边移位)

arraylist 1.6中,无参构造默认是10,超过10 ,则扩大(n*3)/2+1倍。

HashMap 默认是16,如果知道存入数据的大小,建议设置HashMap时候,就规定好为16

四、CopyonWriteArrayList的原理:

它内部是通过Reetranlock锁保证线程安全的,对写和删,改加锁,读不加,性能高于Vector,Vector是用synchronized同步的

发布了23 篇原创文章 · 获赞 3 · 访问量 6858

猜你喜欢

转载自blog.csdn.net/weixin_41834814/article/details/82853433