集合
集合的基类是哪个?
回答最多的是:conllection,但是它其实还继承了Iterable这个接口,在Iterable接口中只有一个方法Iterator<T> iterator() 返回一个在一组 T 类型的元素上进行迭代的迭代器。
我也没看出啥花样来,可能技术没到家哈哈
直接下一步把
conllection接口下面有几个常用的集合实现类:
List:有序的集合,可以存放重复元素
一般会再具体使用到它们的实现类基本问到的也就这三个常用的
List:ArrayList,LinkedList,vector
ArrayList:底层数据结构是数组,线程是不安全的,查询快(数组结构是有索引的),增加跟删除慢(会牵扯到元素位置的移动尤其是在add(int index,Object element)指定位置插入元素方法时牵扯到其他数据集体需要后移,在删除数据后又牵扯到其他数据需要前移,这都是非常耗费时间的)。所以查询多的情况下建议用arrayList
LinkedList:底层是双向链表,线程是不安全的,查询慢(链表结构没有索引一说),增加跟删除快(因为它插入一个数据只需要将前后的指向给到这个新加入的元素即可),而且可以利用它自身的头部添加,尾部添加,头部删除,尾部删除的方法实现队列的先入先出。
Vector:底层数据结构是数组,是线程安全的(因为它内部实现的对元素操作的方法都用关键字synchronized
关键字加了同步锁)
Set:无序的集合,不可以存放重复元素
HashSet:由哈希表支持,不保证元素的顺序,特别是不保证顺序恒久不变,线程不安全,允许null元素存在
其底层 HashMap
实例的默认初始容量是 16,加载因子是 0.75。
LinkedHashSet:由哈希表和链表实现,元素将按插入到set的顺序进行迭代,线程不安全。允许null元素存在带默认初始容量 (16) 和加载因子 (0.75)
TreeSet:相对HashSet的优势是有序,劣势是相对读取慢,底层是依赖TreeMap,红黑树实现。
Map:key和value键值对的形式。
HashMap:存取无序,JDK1.7是基于哈希表加链,JDK1.8之后就是基于哈希表加链表达到默认阈值8就转变为红黑树,允许null键和null值,线程不安全,默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap
。
LinkedHashMap:哈希表和链接列表实现具有可预知的迭代顺序,该迭代顺序通常就是插入顺序。线程不安全。
TreeMap:底层是红黑树存取有序
HashTable: