集合,又称容器,用于存储对象(集合的元素),且长度可变,具体可以是集合类的对象,也可以是集合接口的对象(多态)。
Collection接口
collection接口的动态方法
- 创建对象:Collection<类型实参> col = new ArrayList<>(); //多态
- 引用对象的方法
- col.add(元素) == 添加元素到集合,成功则返回true
- col.remove(元素) == 删除集合中的元素,成功则返回true
- col.clear; == 清空集合中的元素
- col.contains(元素) == 判断集合中是否包含参数元素,是则返回true
- col.isEmpty() == 判断集合是否为空,是则返回true
- col.size() == 获取集合的大小(元素个数)
- col.toArray() == 返回包含集合内容的数组
List接口
List接口的动态方法
- 创建对象:List<类型实参> lis = new ArrayList<>(); //多态
- 引用对象的方法
- lis.add(索引,元素) == 添加元素到集合指定索引(后面元素索引顺延),无返回值
- lis.get(索引) == 返回集合指定索引的元素
- lis.remove(索引) == 移除指定索引的元素,并返回该元素
- lis.set(索引, 元素) == 修改指定索引的元素,并返回该新元素
ArrayList类
查询快、增删慢,数据结构是数组。
ArrayList类的动态方法
- 创建对象:ArrayList<类型实参> arrayList = new ArrayList<>();
- 引用对象的方法
- arrayList.add(集合元素)==添加集合元素
- arrayList.get(元素编号)==获取对应元素编号的集合元素// 元素编号从0开始,下同
- arrayList.remove(元素编号)==移除对应元素编号的集合元素
- arrayList.size()==集合的大小(元素个数)
- arrayList.toString()==返回指定集合内容的字符串表示形式,重写了Object类的方法//中括号型式
LinkedList类
查询慢、增删快,数据结构是链表。
LinkedList类的动态方法
- 创建对象:LinkedList<类型实参> lin = new LinkedList<>();
- 引用对象的方法
- lin.addFirst(元素) == 在集合的首元素前添加元素
- lin.addLast(元素) == 在集合的尾元素后添加元素
- lin.push() == lin.addFirst()
- lin.getFirst() == 获取集合的首元素
- lin.getLast() == 获取集合的尾元素
- lin.removeFirst() == 移除集合的首元素,并返回该元素
- lin.removeLast() == 移除集合的尾元素,并返回该元素
- lin.pop() == lin.removeFirst()
Victor类
JDK1.0开始的集合类,数据结构是数组,单线程,其功能已被ArrayList集合类取代(JDK1.2开始)
Set接口
Set接口的动态方法
- 创建对象:Set<类型实参> set = new HashSet<>(); //多态
- 引用对象的方法:继承Collection接口的方法。
HashSet类
底层是哈希表结构,查询速度非常快。存储数据时,若哈希值不同则直接存储,哈希值相同再比较内容是否相同,若内容不同,则存储,否则不存储。
- 创建对象:HashSet<类型实参> set = new HashSet<>(); //多态
- 引用对象的方法:实现Collection接口的方法。储存自定义类型元素时,需重写hashCode方法和equals方法。
LinkedHashSet类
HashSet类的子类,底层多了一条储存元素顺序的链表。
- 创建对象:LinkedHashSet<类型实参> lhs = new LinkedHashSet<>();
- 引用对象的方法:实现Collection接口的方法。储存自定义类型元素时,需重写hashCode方法和equals方法。
TreeSet类
Iterator迭代器接口
迭代器一般用于遍历集合元素
Iterator接口的动态方法
- 创建对象:Iterator<类型实参> ite = col.iterator(); //使用Collection接口的方法获取迭代器对象,赋值给Iterator对象(多态)
- 引用对象的方法
- ite.hasNext() //如果迭代具有更多元素,则返回 true
- ite.next() //返回迭代器的下一个元素
数据结构
栈:入口和出口在集合的同一侧,先进后出。
队列:入口和出口在集合的两侧,先进先出。
数组:查询快(地址连续),增删慢(重新创建)。
链表:查询慢(逐个查询),增删快(只修改节点)。
红黑树:趋近于平衡树,查询速度非常快,查询叶子节点最大次数和最小次数不能超过2倍。
Map接口
两个泛型<K, V>:K即key键,V即value值,映射关系,相当于数学函数中的自变量x、函数值y。存储重复key键的value值将覆盖原key键的value值。
Map接口的动态方法
- 创建对象:Map<类型实参1, 类型实参2> map = new HashMap<>(); //多态
- 引用对象的方法
- map.put(key1, value1) == 替换映射元素key1=value1,返回key1的旧value值,若key1为新增,则旧value值为null。
- map.remove(key1) == 移除映射元素key1=value1,返回value1,若key1不存在,则返回null。
- map.get(key1) == 返回key1的映射value1,若key1不存在,则返回null。
- map.containsKey(key1) == 判断map集合是否包含key1键,是则返回true, 否则返回false。
- Set<类型实参1> set = map.keySet() == 返回map集合的key键Set集合,遍历方法1的前步奏
Map.Entry接口
Map接口的内部接口,存储Map的映射信息
Map.Entry接口的动态方法
- 创建Set型对象:Set<Map.Entry<类型实参1, 类型实参2>> set = map.entrySet(); //遍历方法2的前步奏,Set集合元素为Map.Entry集合,理解为二维集合。
- 创建Map.Entry型对象:遍历Set集合的元素,每个元素即为一个Map.Entry型对象
- 引用对象的方法
遍历元素名为entry
- entry.getKey() == 返回entry集合的key键
- entry.getValue() == 返回entry集合的value值
HashMap类
底层是哈希表结构
HashMap类的动态方法
- 创建对象:HashMap<类型实参1, 类型实参2> hm = new HashMap<>();
- 引用对象的方法:实现Map接口的方法。key键为自定义类型元素时,需重写hashCode方法和equals方法。
LinkedHashMap类
底层是哈希表结构,多一条记录储存顺序的链表,即集合元素按顺序存储。
LinkedHashMap类的动态方法
- 创建对象
- 引用对象的方法:继承HashMap类或实现Map接口的方法。
Hashtable类
key键和value值不能为null,否则报空指针异常,其功能基本被HashMap类取代。注意:table首字母小写。
Hashtable类的动态方法
- 创建对象:Hashtable<类型实参1, 类型实参2> ht = new Hashtable<>();
- 引用对象的方法:实现Map接口的方法。
JDK9的集合新特性
List接口、Set接口、Map接口的新增静态方法:List<类型实参1> list = List.of(元素列表) == 批量添加元素到集合。Set接口、Map接口(都用逗号分隔)同。//此方法添加元素后,集合不可再改变,否则报异常。Set接口、Map接口用此方法添加重复元素报异常。