什么是容器类
容器类:顾名思义就是一个容器,是一个装引用类型数据的容器。它也叫集合类。
它主要由三种构成:list、set、map。它们都是接口。
常见的容器类
Map接口的实现类主要有:HashMap、TreeMap、Hashtable等
Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等
List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等
list:有序容器,元素可重复,可以插入多个null值,元素都有索引值。
arraylist:就是存入一个Object动态数组,也是我们常用的集合,它允许任何元素的插入,甚至包括null。每一个ArrayList都有一个初始化的容量(10),该容量代表了数组的大小,随着容器中容量的不断增加,容器的大小也会随着增加。在每次向容器中增加元素时,会进行容量检查,当快溢出时,会进行扩容操作。
set:无序容器,不存在重复元素。只允许存在一个null值
hashset:无重复(去重)。底层采用的是hashmap。
LinkedHashSet:LinkedHashSet继承与HashSet,并且其内部是通过LinkedHashMap来实现的。
TreeSet:这个是有序且去重的。底层是红黑树。
map:是一个键值对集合。key无序且唯一。value是可以重复的
hashmap:JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间
LinkedHashMap:在hashmap在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作
HashTable:数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的
TreeMap:红黑树
面试题:
1.需要得到一份不重复的数据 你需要什么样的集合来接受数据?
仅仅是不重复可以用hashset。如果是有序不重复可以用linkedhashlist、linkedhashmap等。
(注意一下:treeset是按大小排序的且去重的)。
2.需要映射关系的一组数据 应该使用哪个集合来处理?
map(可以说下具体实现类。比如hashmap 、treemap等特点)