在编程时,可以使用数组来保存多个对象,但数组长度不可变化,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的。如果需要保存数量变化的数据,数组就有点无能为力了。
为了保存数量不确定的数据,Java 提供了集合类。
一、集合的概述
1、集合是一个容器,是一个载体,可以一次容纳多个对象以及其他的数据类型
2、集合不能直接存储基本数据类型,也不能直接存储Java对象,集合当中存储的都是Java对象的内存地址
-
注意:集合在Java中本身是一个容器,是一个对象。
-
集合中任何时候存储的都是“引用”。。
3、Java中每一个不同的集合,底层都对应不同的数据结构。往不同的集合中存储元素,就等同于将数据放到了不同的数据结构当中;例如:
-
往集合C1里面放数据,可能会存放到数组上了。
-
往集合A里面放数据,可能会存放到二叉树上了。等等
4、所有的集合类和集合接口都在Java.util.*
的包下
二、集合的继承结构图以及特点
注:在这里我主要是针对常见的集合类型
Java中的集合分两大类:
-
一类是单个方式存储元素:该类集合的超级父接口是:
java.util.Collection;
-
一类是以键值对的方式存储元素:该类集合的超级父接口是:
java.util.Map;
(一)单个方式存储元素(Collection)
1、继承结构图:
2、特征:
public interface List<E>:
有序集合(也称为序列 )。 该接口的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。 (下标)有序可重复
注意:这里的有序是指存进去什么顺序,取出来还是该顺序。。
public interface Set<E>:不包含重复元素的集合。 更正式地说,集合不包含元素对
e1
和e2
,使得e1.equals(e2)
和最多一个null元素。 正如其名称所暗示的,此接口模拟数学集抽象。
注意:无序不可重复,set集合中的元素没有下标
(二)以键值对的方式存储元素(java.util.Map;
)
1、继承结构图:
2、特征:
1、Map集合和Collection集合没有关系
2、map集合是以key和value的这种键值对的方式存储元素。
3、key和value都是存储Java对象的内存地址。。
4、所有Map集合的key都是无序不可重复的。。和Set集合存储元素特点相同
public class HashMap<K,V>:
基于哈希表的
Map
接口的实现。 此实现提供了所有可选的映射操作,并允许null
值和null
键。 (HashMap
类大致相当于Hashtable
,除了它是不同步的并且允许空值。)是非线程安全的。。
-
注意:HashMap集合在JDK8以后,如果哈希表单向链表中的元素超过8个,单向链表这种数据结构会变成二叉树或者红黑树这种数据结构。。当红黑树上的节点数小于6时,会把红黑树重新变成单向链表。。
-
HashMap集合的key和value允许出现null值;但是key只能有一个null值,否则会出现重复值,后面的会覆盖前面的。
public class Hashtable<K,V> :(不常用)
该类实现了一个哈希表,它将键映射到值。 任何非
null
对象都可以用作键或值。是线程安全的。。Hashtable集合初始化容量是11,扩容是原容量的2次方+1
它有一个子类:properties类继承了Hashtable类::
5、SortedMap接口进一步继承了Map接口
public interface SortedMap<K,V>:
SorteMap集合Key存储元素的特点:也是无序不可重复,但是放在SorteMap集合中的key部分的元素可以自动排序,是自动按照大小顺序排序的。称为可排序的集合。。
而TreeMap则是实现了Sorted Map接口的
三、在这里我画了一个自平衡二叉树的讲解图
自平衡二叉树在后续的集合中将会用到:
下期讲解集合常用的各种方法。