集合类:
linkedlist 和 arrayList 区别
linkedList 是基于链表,所以增加和删除数据要更快,arrayList 是基于动态数组,所以随机查找的效率更高,linkedList 和 arrayList 都实现了 List 接口,不同的是,LinkedList 多实现了 deque 的接口,所以有类似 addLast,removeLast 的方法,可以当做双端队列来使用
arraylist 的扩容问题:
默认的容量是 10,如果构造的时候声明容量大小,会设置为声明的大小。
扩容时,会调用 grow 方法,每次扩容的大小为当前大小的 1.5 倍。
使用 add 插入数据的时候,首先判断是否容器已满,如果已经满,会先扩容再添加,插入指定位置的时候,也会先判断该位置是否合法。
arraylist 和 vector 区别:
相同点:
都实现了 list 接口,都是有序集合,相当于一种动态的数组,可以按照位置索引号取出元素,集合内数据是可以重复的,默认的大小都是 10.
不同点:
vector 是线程安全的,方法是线程同步的使用 synchronize 修饰的,而 arraylist 是线程不安全的,方法之间线程不同步,如果只有一个线程访问集合,最好使用 arraylist,因为不考虑线程安全问题,效率会高,但是如果有多个线程访问,就最好使用 vector,就不需要手动考虑和编写线程安全的代码了。arrylist 的扩容每次增加 1.5 倍,但是 vector 在不指名增加量的情况下,是增加 2 倍。vector 可以设置增长空间的大小,但是 arraylist 不能设置。
线程安全的 list 集合
vector,synchronizedList,CopyOnWriteArrayList,CopyOnWriteArraySet,hashTable,CourrentHashMap
数组 Array 和 列表 ArrayList 的区别,什么时候使用
Array 可以包含基本类型和对象,但是 Arraylist 只能包含对象
Array 大小是固定的,Arraylist 的大小是动态变化的,可以扩容
如果元素大小是固定的,而且能事先知道,我们就应该使用 Array 而不是 Arraylist。
集合框架的基本接口有哪些:
List:有顺序的 collection,并且可以包含重复元素
Map:可以把 key 映射到 value 的独享,键值不能重复,但可以为空
Collection:代表一组对象,每一个对象都是它的子元素
Set:不包含重复元素的 Collection。