简介
集合框架:用于存储数据的容器。
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。
任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
特点
对象封装数据,对象多了也需要存储。集合用于存储对象。
对象的个数确定可以使用数组,对象的个数不确定的可以用集合。因为集合是可变长度的。
集合和数组的区别
数组是固定长度的;集合可变长度的。
数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。
数据结构:就是容器中存储数据的方式。
使用集合框架的好处
容量自增长;
提供了高性能的数据结构和算法,使编码更轻松,提高了程序速度和质量;
允许不同 API 之间的互操作,API之间可以来回传递集合;
可以方便地扩展或改写集合,提高代码复用性和可操作性。
通过使用JDK自带的集合类,可以降低代码维护和学习新API成本。
集合框架中的泛型
Java1.5引入了泛型,所有的集合接口和实现都大量地使用它。泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。泛型也使得代码整洁,我们不需要使用显式转换和instanceOf操作符。它也给运行时带来好处,因为不会产生类型检查的字节码指令。
Collection接口
所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
Collection一次存一个元素,是单列集合;
任意的单列集合都可以使用Collection接口中的方法
Collection集合主要有List和Set两大接口
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素唯一性。
Collection集合的方法(以ArrayList集合为例):
1、add():向集合的尾部追加指定的元素
2、addAll():将指定集合中的元素都添加到此集合中
3、clear():移除集合中的所有操作
4、contains():如果此集合中包含指定元素,则返回true
5、containsAll():如果此集合中包含指定集合的所有元素,则返回true
6、equals():比较此集合与指定对象是否相等
此方法判断两集合之间的所有元素是否相等,少一个都不行
7、hashCode():返回此集合的哈希码值
8、isEmpty():集合为空,返回true
9、iterator():返回在此集合的元素上进行迭代的迭代器
10、remove():移除此集合中出现的首个指定元素
11、removeAll():移除此集合中那些也包含在指定集合中的所有元素
12、retainAll():仅保留此集合中那些也包含在指定集合中的所有元素
与上面相反,保留所相同的元素
注:对象判断相同是判断引用的地址
13、size():集合中的元素数
14、toArray():返回包含此集合中所有元素的数组
将此集合转换为数组
15、toArray(T [] a):返回包含此集合中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
Map
Map一次存一对元素,是双列集合。Map存储的一对元素:键–值,键(key)与值(value)间有对应(映射)关系。
特点:无序、以键值对的形式添加元素,键不能重复,值可以重复
Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。
Map 的常用实现类:
TreeMap:基于红黑树实现。
HashMap:基于哈希表实现。
HashTable:和 HashMap 类似,但它是线程安全的,这意味着同一时刻多个线程可以同时写入 HashTable 并且不会导致数据不一致。它是遗留类,不应该去使用它。现在可以使用ConcurrentHashMap 来支持线程安全,并且 ConcurrentHashMap 的效率会更高,因为 ConcurrentHashMap 引入了分段锁。
LinkedHashMap:使用双向链表来维护元素的顺序,顺序为插入顺序或者最近最少使用(LRU)
Map集合的主要方法:
1、clear():移除集合中的所有操作
2、containsKey(Object key) 查询集合中是否包含指定的Key,如果包含返回true
3、containsValue(Object value) 查询集合中是否包含指定的value,如果包含返回true
4、entrySet() 返回集合中所包含的键值对所组成的Set集合,每个集合元素都是Map.Entry对象(Entry是Map的内部类)
5、get(Object Key) 返回指定Key对于的vales,如果集合中不包含key则返回null
6、isEmpty() 查询集合是否为空,为空返回true
7、KeySet() 返回集合中所有Key所组成的Set集合
8、Object put(Object key,Object value) 添加一个键值对,如果已存在相同的key值,则新的键值对覆盖旧的键值对
9、putAll(Map m) 将指定的map集合的键值对添加到map集合中
10、remove(Object key) 删除指定key所对于的键值对,返回可以所关联的Value,如果key不存在,返回null
11、size() 返回map集合的键值对个数
12、values() 返回map集合所有value组成的Collection
13、内部类Entry
1、getKey() 返回Entry里包含的Key值
2、getValue() 返回Entry里包含的value值
3、setValue(V value) 设置该Entry里包含的Value值,并返回新设置的value值