1、list集合是有序的吗?主要有那些list集合
list是有序可重复的集合。ArrayList、LinkedList是线程不安全的。线程安全的lst有Vector、CopyOnWriteArrayList。
2、ArrayList和LinkedList有什么区别
ArrayList底层使用的是数组。由于数组结构,也就是顺序链表结构,它逻辑上和物理上都是相邻的。所以可以通过下标查找,随机增删需要移动大量的元素。而LinkedList底层是双向链表结构,是逻辑上相邻,但物理上不相邻,所以它查找元素需要从头开始,因此它的查询比ArrayList慢,而增删并不像ArrayList那样需要移动大量元素,只需要改变节点的指向就可以了。所以LinkedList比ArrayList随机增删快的多。但是也有一些特殊的情况,往最后添加元素ArrayList 和LinkedList的速度差不多。
3 、ArrayList和Vector有啥区别
ArrayList和Vector最大的区别就是ArrayList是线程不安全的,而Vector基本上每个方法都使用了synchronized修饰,所以它是线程安全的。但是并不推荐在高并发的情况下使用Vector。而是使用CopyOnWriteList。
4、为什么再高并发的情况下使用CopyOnWriteArrayList而不是使用Vector
Vector的方法基本都使用了同步关键字synchronized修饰,比如在使用get方法,在高并发的情况下,会产生锁竞争,从而会导致高并发下查询速度比较慢。而CopyOnWriteList利用了对象的不变性,在没有写操作之前,由于对象未发生改变,因此不需要加锁,从而提高了读取的性能。但是写操却不是很好,因为写操作 首先加了lock锁,在改变对象时,是先获取对象的一个副本,然后再对象上修改,最后将副本写会。所以在多读少写的时候使用CopyOnWriteArrayList。少读多写的情况下使用Vetor,但是这种情况发生的概率比较小