集合基础知识点

在这里插入图片描述

Java集合类概述;ava SE包含了由一组类和接口组成的Java集合框架(Java Collections Framework,简称JCF),其主要功能是用来将存储的数据以某种结构组织,并以特定的方式来访问这些数据,其目标是提供一个处理对象集合的通用框架,减少程序员处理不同对象集合时的编码量。
Java集合框架中根据这三个区别,将对象的存储方式分为三种类型,分别是;
 Set(集):对象容器中的对象没有顺序,且不能重复
 List(列表):对象容器中的对象按照索引顺序排序,而且可以有重复的对象。
 Map(映射):对象容器中的元素包含一对"键对象-值对象"映射,其中键对象不能重复,值对象可以重复。
这三种对象的存储方式,对应了Java集合框架中的三个核心接口Set、List和Map。

在Set和List接口之上,定义接口Collection,用于定义存取Set和List类型容器中对象的一些通用操作,包括对象的增加、删除、遍历等。
为支持对象的排序和遍历访问操作,Java集合框架中又提供了几个接口:
 接口SortedSet为Set类型容器提供排序功能。
 接口SortedMap是为Map类型容器提供对键对象的排序。
 接口Iterator提供了对集合对象进行遍历访问的遍历器。
 接口Comparable和Comparator用来实现集合中对象的排序

Collection接口;在集合框架中,集合(Collection)接口位于Set接口和List接口的最顶层,是Set接口和List接口的父接口。Collection接口中定义了Collection对象共有的一些基本方法,这些方法分为基本操作、批量操作和数组操作。
Collection接口中的主要方法;
基本操作 int size() 返回当前集合中包含的元素个数
isEmpty() 判断集合中是否含有元素
boolean contains(Object o); 判断集合中是否包含某一指定元素
boolean add(Object o); 向集合中添加到某一元素
boolean remove(Object o);从集合中删除某一元素
Iterator iterator(); 返回一个遍历器,用来访问集合中的各个元素
批量操作 containsAll(Collection c) ;判断集合中是否包含某一指定集合中的全部元素
boolean addAll(Collection c); 将另一个集合中的所有元素插入到当前集合中
boolean removeAll(Collection c); 从集合中删除指定集合中的全部元素
boolean retainAll(Collection c); 只保留指定集合中包含的元素,其他的删除
void clear(); 删除集合中所有元素
数组操作 Object[] toArray(); 返回一个包含集合所有元素的array。

Iterator接口是一种用于遍历集合的接口。所谓遍历,是指从集合中取出每一个元素的过程。在Collection接口中,有一个iterator()方法,通过该方法可以返回一个Iterator对象。通过这个对象,可以遍历集合中所有元素。
Iterator接口的方法; hasNext() 如果集合中还有更多元素,该方法返回true
next() 返回集合中的下一个元素
remove() 删除iterator返回的最后一个元素。
在实际应用开发中,很少直接使用Collection接口进行开发,基本都是使用Colleciton接口的子接口。Collection类的主要子接口包括List和Set。
List接口继承自Collection接口,它有如下特点:
 List中的元素是有顺序的。
 List通常允许重复元素。
 List的实现类通常支持null元素。
 可以通过索引访问List对象容器中的元素。
List接口中的方法;
void add(int index, Object o) 在列表指定的位置插入对象
boolean addAll(int index, Collection c) 将另一个集合中的所有对象插入到列表指定位置
Object get(int index) 返回列表中指定位置的对象
Object set(int index, Object o) 用指定对象替换列表中指定位置的对象
Object remove(int index) 删除列表指定位置的对象。

泛型,就是允许在定义类、接口时指定类型形式参数,这个类型形式参数将在声明变量、创建对象时确定(即传入的实际参数)。
LinkedList是实现了双向链表功能的列表,它将列表中的每个对象放在独立的空间中,而且每个空间中还保存有上一个和下一个链接的索引。

Set接口也继承自Collection接口,同时也继承了Collection接口的全部方法。它有如下特点:
 Set类型容器中不能包含重复元素。当加入一个元素到容器中时候,要比较元素的内容是否存在重复的,所以加入Set类型对象容器的对象必须重写equals()方法。
 元素可能有顺序,也可能没有顺序。
 因为元素可能没有顺序,所以不能基于索引访问Set中的元素。

HashSet类是基于哈希算法的Set接口实现,它主要有如下几个特点:
 当遍历HashSet时,其中的元素是没有顺序的。
 HashSet中不允许出现重复元素。这里的重复元素是指有相同的哈希码,并且用equals()方法进行比较时,返回true的两个对象。
 允许包含null元素

Map(映射)接口是Java集合框架中不同于Collection接口的另一个重要接口,它对应的是在一种从键(Key)到值(Value)的对应关系的集合。也就是说,Map类型的对象容器里面保存着两组对象,一组对象用于保存Map里的Key,另外一组用于保存Value。Key和Value可以是任何引用类型的数据。Key不能重复,但是Value可以重复。
Key和Value之间存在单向一对一关系,即通过指定的Key,可以找到唯一对应的Value。也就是说,从Map中取出数据时,只要给出指定的Key,就可以取出对应的Value。
Map接口中定义了Map对象所共有的方法。这些方法基本分为三类操作:基本操作、批量操作、Collection视角的操作。

基本操作 get( Object key ) 返回与指定键相关的值
put(Object key, Object value ) 向该映射中添加键值对
remove(Object key) 从该映射中删除包含指定键的键值对
containsKey(Object key ) 如果该映射包含指定键,则返回true
containsValue(Object value ) 如果该映射包含指定值,则返回true
size() 返回该映射中包含的键/值映射关系数
isEmpty() 如果该映射为空,则返回为true。
批量操作 clear() 删除映射内所有元素
putAll(Map m) 将指定映射中的所有映射关系复制到此映射中
Collection
视角操作 keySet() 返回一个包含映射中所有Key的Set对象
values() 返回一个包含映射总所有Value的Collection对象
entrySet() 返回一个包含该Map中所有条目的Set对象,条目由内部接口Entry定义
HashMap是基于哈希算法的Map接口的实现。HashMap将它的键保存在哈希表中进行维护,键是唯一的。但是,HashMap并不保证键以特定顺序排列,特别是不保证顺序永久不变。

Java集合框架中包含了Collections类和Array类这两个功能强大的工具类,这两个类提供了包装器实现、数据结构算法和数组相关的应用。这两个工具类都提供了大量静态方法,在操作集合和数组时,使用这两个工具类中的方法,可以大大减轻程序员编码量,提升开发效率,提高代码性能。
Collections类
Java集合框架中提供了一个操作Set、List和Map等集合的工具类Collections,该工具类中提供了大量方法,用于对集合元素进行排序、查询、修改等操作。这些方法都是静态方法。
Collections类中提供了多个静态方法用于创建线程安全的同步集合,包括:
 synchronizedCollection(Collection c):返回一个线程安全的collection。
 synchronizedList(List list):返回一个线程安全的list。
 synchronizedSet(Set s):返回一个线程安全的set。
 synchronizedMap(Map m):返回一个线程安全的map。

Java集合框架不仅提供了Collections类用于操作集合,同时也提供了Arrays类用于操作数组。Arrays类包含用来操作数组(比如排序和搜索)的各种方法。