什么是集合
集合实际上就是一个容器,可以来容纳其他类型的数据。集合是一个载体,可以一次容纳多个对象。
数组其实就是一个最简单的集合。
集合中存储的什么
存储内容:
集合在java中本身是一个容器,是一个对象。集合不能直接存储基本数据类型,也不能直接存储java对象。集合当中存储的都是java对象的内存地址。(或者说集合中存储的是引用)
存储方式:
在java中每个不同的集合,底层会对应不同的数据结构。往不同的集合中存储元素,等于将数据放在了不同的数据结构中(数据存储的结构就是数据结构,不同的数据结构,存储的方式不同)
new ArrayList();//创建一个集合,底层是数组
new LinkList();//创建一个集合,底层是链表
new TreeSet();//创建一个集合对象,底层是二叉树
在java中集合分为两大类:
一类是单个方式存储元素,这一类集合中超级父接口:java.util.Collection
一类是以键值对(key-value)方式存储元素,这一类集合的超级父接口是:java.util.Map
常用的集合
Collection接口中常用的集合
Collection接口 单个方式存储
List接口 有序(存取顺序一样)可重复,存储元素有下标
ArrayList类
底层采用数组数据结构,查询快,增删慢
ArrayList是非线程安全的
LinkedList类
底层采用双向链表数据结构
非线程安全,查询慢,增删快
Vector类
底层采用数组数据结构
Vector是线程安全的(synchronized关键字修饰)效率低
Set接口 无序(存取顺序不一样)不可重复,元素没有下标
HashSet类
在创建时,底层实际上创建的是HashMap集合,HashMap集合是一个哈希表数据结构
SortedSet接口 放在SortedSet集合中的元素可以自动排序
TreeSet类
在创建时,底层实际上创建了一个TreeMap集合,TreeMap集合是二叉树数据结构
Map接口中常用的集合
Map集合以key-value键值对形式存储,key和value都是存储java对象的内存地址,所有map集合key的特点都是无序不可重复的。map集合的key和set集合存储元素特点相同
Map接口
HashMap类
底层是哈希表数据结构,是非线程安全的
HashTable类
底层是也是哈希表数据结构,是线程安全的,效率低,使用少(有其他方式保证线程安全)
Porperties类
是线程安全的(继承了HashTable)另外properties存储元素的时候也是采用key-value的形式存储,并且key和value支支持String类型不支持其他类型。Properties被称为属性类。
SortedMap接口 key存储元素的特点,key是无序不可重复的,且放在该集合中的可以会自动排序
TreeMap类
TreeMap集合是二叉树数据结构
注意:上述无序/有序是指,存取时顺序不一样/一样,与SortedMap接口实现集合类的自动排序不冲突
总结(所有实现类):
Collection
- ArrayList:底层是数组。
- LinkedList:底层是双向链表
- Vector:底层是数组,线程安全的,效率低,使用少
- HashSet:底层时HashMap,放到HashSet集合中的元素等同于放到HashMap集合key部分了(HashMap中的key要求不能重复),value部分一致使用一个相同的须知来保存。
- TreeSet:底层时TreeMap,放到TreeSet集合中的元素等同于放到TreeMap集合key部分了。
Map
- HashMap:底层是哈希表数据结构
- HashTable:底层是哈希表数据结构,线程安全,使用较少。
- Properties:时线程安全的,并且 key和value只能存储字符串String
- TreeMap:底层是二叉树。TreeMap集合中的key可以自动按大小顺序排序
List集合存储元素的特点:
有序可重复
有序是指存进去的顺序和取出的顺序是一样的
Set集合存储元素的特点:
无序不可重复
无序是指存进去的顺序和取出的顺序不一定相同,且Set集合中元素没有下标
SortedSet集合存储元素的特点:
无序不可重复,但是SortedSet结合中的元素是可排序的。
无序是指存进去的顺序和取出的顺序不一定相同,且Set集合中元素没有下标
可排序是指可以按照大小顺序自动排序
Map集合的key就是一个Set集合,往Set集合中放数据,实际上放到了Map集合的key部分