集合本身是一个对象,也有内存地址,存储的也是一个对象引用。集合可以套集合。
不能存储java对象,不能存储基本数据类型,这两个是通过自动包箱。
什么时候用什么集合,懂得它们的底层是什么数据结构,掌握用法即可
比如: new ArrayList();创建一个集合,底层是数组
new LinkedList();创建一个集合对象,底层是链表
new TreeSet();创建一个集合对象,底层是二叉树
集合包名:
java.util.*; 所有的集合类和集合接口都在java.util包下
集合继承结构图:需牢牢掌握
在java中集合分为两大类:
需要注意的是,我们的集合不止以下几种,还有很多,只是开发常用这几种
一、单个方式存储元素:
单个方式存储元素,这一类集合中超级父接口:java.util.Collection
Collection 继承了Iterable父接口,Iterable这个接口有一个iterator方法,Collection可以使用它,该方法返回的是一个Iterator迭代器对象,用来遍历集合的元素
Collection 其中两个子接口需要我们掌握:
List、Set
List: 存储特点:有序可重复,存储的元素有下标,有序实际上是指存进去是这个顺序,取出来还是这个顺序,并不是说是按照大小排序的有序。是针对于存取顺序一致,类似于排队。
LIst接口下面有两个类,ArrayList类、LinkedList类、Vector类
ArrayList类:底层采用数组的数据结构,查询快,有下标,非线程安全的,底层是相当于Object数组
LinkedList类:底层采用双向链表数据结构,增删改除效率更快
Vector类:底层是Object数组,线程安全的,效率低,几乎不用,现在保证线程安全有别的方案
Set:存储特点:无序不可重复,无序表示存进去是这个顺序,取出来就不一定是这个顺序了,
另外Set集合中元素没有下标。Set集合中的元素不能重复。
Set下面有两个类,HashSet,TreeSet
HashSet:底层是hashmap,在源码中创建的hashset其实是new了一个hashmap
向hashset存储数据,实质上是以键值对,Key,Value存储到了hashmap中,而hashmap底层是一个哈希表数据结构
TreeSet:Collection接口---->Set接口---->SortedSet-接口--->实现类TreeSet
SortedSet集合存储元素的特点:
由于继承了Set集合,所以也是无序不可重复,但是放在SortedSet集合中的元素可以自动排序,我们称为可排序集合
TreeSet集合底层实际上是TreeMap,new TreeSet集合的时候,底层实际上new了一个TreeMap集合。
往TreeSet集合中放数据的时候,实际上是将数据放在了TreeMap集合中了。
源码:,add(E e)添加元素,实际上是调用了map的put方法
而TreeMap集合底层采用的是二叉树数据结构
二、 以键值对的方式存储元素,这一类集合中超级父接口:java.util.Map;
<Interface>Map集合,Map没有父接口,跟Collection接口没有关系,独立的一个接口集合。
以Key和Value这种键值对的方式存储元素;key和Value都是存储java对象的内存地址
所有Map集合的key特点:无序不可重复
其实Map集合中的所有的Key都是set集合
Map下面的接口:SortedMap接口
接口Map--->接口SortedMap--->实现类TreeMap
SortedMap集合的key存储元素的特点:
首先是无序不可重复的,另外放在SortedMap集合key部分的元素会自动按照大小顺序排序,称为可排序的集合
Map下面的实现类:
HashMap、Hashtable,TreeMap
HashMap:非线程安全,底层是哈希表,单向链表+数组+红黑树
Hashtable:线程安全,底层也是哈希表,效率低不用
Hashtable---->属性类:Properties,继承Hashtable线程安全,另外properties存储元素的时候
也是采用key和value的形式存储,并且key和value只支持String类型,不支持其他类型。开发会用。
TreeMap:底层是二叉树
可排序的--->SortedSet,SortedMap(key)。共同特点:无序不可重复
总结:
List:有序可重复,有数组下标
ArrayList: 底层是数组,查询效率高,增删改除效率低
Collection接口--->List接口--->ArrayList类
LinkedList:底层是双向链表,增删改除效率高,查询慢
Collection接口--->List接口--->LinkedList类
Vector:底层是数组,线程安全,效率低,用的少
Collection接口--->List接口--->Vector类
Set(Map的key部分):无序不可重复,没有数组下标
HashSet:底层是hashmap,哈希表,非线程安全,放在HashSet集合中的元素相当于放在了hashmap集合中
Collection接口--->Set接口--->HashSet类
TreeSet:底层是TreeMap,二叉树,放在treeset集合中元素可按照大小自动排序
Collection接口--->Set接口--->SortedSet接口---->TreeSet类
Map:key无序不可重复
HashMap:底层是哈希表
Map接口--->HashMap类
TreeMap:底层是二叉树,TreeMap集合的key和value可自动按照大小排序
Map接口--->SortedMap接口--->TreeMap类
Hashtable:底层是哈希表数据结构,线程安全,效率低,有一个属性类,properties开发常用
Map接口--->Hashtable类
Properties:Hashtable的属性类,线程安全,采用key和value存储,并且key和value只能是String类型
Map接口--->Hashtable类-->属性Properties