集合(Collection接口 和 Map接口)详解
集合(Collection接口 和 Map接口)详解
一、集合
1.1 与数组类似。集合实际上就是一个容器、一个载体,可以用来容纳其它类型的数据。
注:集合不能直接存储基本数据类型,另外集合也不能直接存储java对象,集合中存储的都是java对象的内存地址(或者说集合中存储的是引用)
list.add(100)//java中有个自动装箱,变成了Integer
1.2 在java中每一个不同的集合,底层会对应不同的数据结构。往不同的集合中存储元素,等于将数据放到了不同的数据结构(数据存储的结构)当中,不同的数据结构,数据存储方式不同,即,使用不同的集合等同于使用了不同的数据结构
常用的数据结构:数组、二叉树、链表、哈希表 · · · · · ·
注:不会数据结构没关系(虽然我正在学),java中已经将数据结构实现了,写好了,只需要学会怎么使用,在什么情况下选择哪一种合适的集合去使用即可 new
1.3 所有的集合类和集合接口都在 java JDK中java.util包下
java.util.*;
1.4 在java中 集合分为两大类
一类:是单个方式存储元素
单个方式存储元素,这一类元素的超级父接口:java.util.Collection;
一类:是以键值对的方式存储元素
以键值对的方式存储元素,这一类元素的超级父接口:java.util.Map;
二、Collection接口
有三个常见的子接口:List、Set和Queue
List接口(有序可重复)
特点:
- 集合中的元素是有序的(存进去的顺序,取出来还是这个顺序,不是按照升降序的意思)
- 存储的元素都有下标,下标从0开始,以1递增
- 允许有重复的元素
三个常见的实现类:LinkedList、ArrayList和Vector。
-
ArrayList:用数组实现的List——随机存取效率高,增删效率低 轻量级。线程不安全。
-
LinkedList:用双向循环链表 实现的List——随机存取效率低,增删效率高。线程不安全。
-
Vector:用数组实现的List——重量级,占据更多的系统开销。线程安全。(使用少)
Set接口(无序不可重复)
特点:
-
集合中的元素是无序的(存进去的顺序,取出来就不一定是这个意思,不是按照升降序的意思)
-
存储的元素没有下标元素
-
不能重复
两个常见的实现类:HashSet和TreeSet类
- HashSet:用了哈希表数据结构
- TreeSet(父接口 SortSet,SortSet父接口Set):用了二叉树数据结构
Queue接口
Collection集合继承图
三、Map接口
Map和Collection没有关系;以key和value的这种键值对的方式存储元素;key和value都是存储java对象的存储地址:Map集合的key和Set集合存储元素相同,无序不重复
三个常见的实现类:HashMap、TreeMap和HashTable
HashMap:用了哈希表数据结构,是非线程安全
HashTable:用了哈希表数据结构,是线程安全的,里面的所有方法都带有synchronized关键字,效率较低(使用少)
TreeMap(父接口SortedMap,SortedMap父接口Map):用了二叉树数据结构
#SortedMap集合的key存储,首先是无序不可重复的,其次是集合中key部分的元素会自动按照大小排序,称为可排序的集合
Map集合继承图
注:图片看不清的,可以自己去查查java帮助文档,基本都有