学习内容
集合
Iterator
迭代器,是集合的专用遍历方式
常用方法
next()
返回迭代器的下一个元素。
hasNext()
如果集合中有更多元素,则返回true
使用迭代器遍历
如图,可以实现遍历打印的效果。
Iterator it =new Iterator();
while(it.hasNext()){
System.out.println(it.next());
}
Collection 集合
Collection
集合是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection
的元素。- JDK 不提供此接口的任何直接实现,提供更具体的子接口实现,例如
Set
和List
。
常用方法
方法名 | 说明 |
---|---|
add(E e) | 添加元素 |
remove(Object o) | 从集合中移除指定的元素 |
clear() | 清空集合中的元素 |
boolean contains(Object o) | 判断集合是否存在指定函数 |
boolean isEmpty() | 判断集合是否为空 |
int size | 返回集合的长度,也就是集合中元素的个数iter |
iterator() | 返回此集合的迭代器,返回类型为 Iterator |
List 集合
List 集合,也称有序集合,也称序列。
在 List 集合中:
可以精确控制列表中的插入位置;
可以通过索引访问元素;
可以搜索列表中的元素;
允许重复的元素。
方法
add(int index, E element) | 在指定位置中插入元素 |
get(int index) | 返回指定索引位置的元素。 |
set(index, E element) | 修改指定所引处的元素,返回被修改的元素 |
remove(int index) | 移除指定位置的元素 |
Set 集合
特点:
Set 集合是 Collection 的子类。其特点为:
- 不包含重复元素
- 没有带索引的方法,因此不能使用普通的 for 循环遍历
- 是一个接口,不能直接实现。
HashSet
该类可以实现 Set 接口,对集合的迭代顺序不作任何保证。
Map 集合
概述
-
是一个接口,不能实例化
-
Map
集合的泛型由2部分组成,K 和 V。 Map< K ,V > 。例如:MAP< int ,String > K 是键的类型。 V 是值的类型。
-
Map
集合将键映射到值的对象。 -
不能包含重复的键
-
每个键可以映射最多一个值
-
实现类: HashMap
常用方法
方法名 | 说明 |
---|---|
V put(K key, V value) | 添加元素,将指定的值与该映射中制定的键相关联。 |
V remove(Object key) | 根据键删除对应元素 |
void clea() | 移除所有键值对元素 |
boolean containsKey(Object Key) | 判断集合是否包含制定的键 |
boolean containsKey(Object Key) | 判断集合是否包含制定的值 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 返回集合长度,即键值对的个数 |
V get(Object key) | 根据键获取值。如果该键不存在于 Map 中,则返回 null |
Set <K> keySet() | 获取所有键的集合 |
Collection <V> values() | 获取所有值的集合 |
Set<Map.Entry<K,V>>entrySet() | 获取所有键值对对象的集合 |
Collections 类
此类仅由静态方法组合或返回集合。包含对集合进行操作的多态算法。
常用方法
//将指定的列表升序排列
public static <T extends Compareable<?super T>> void sort(List<T> list);
//反转指定列表中的元素
public static void reverse(List<?> list);
//使用默认的随机源随机排列指定列表
public static void shuffle(List<?> list)
Collector
Collector
包含5个参数,传入参数不同,其行为不同。
public interface Collector<T, A, R> {
// supplier参数用于生成结果容器,容器类型为A
Supplier<A> supplier();
// accumulator用于消费元素,也就是归纳元素,这里的T就是元素,它会将流中的元素一个一个与结果容器A发生操作
BiConsumer<A, T> accumulator();
// combiner用于两个两个合并并行执行的线程的执行结果,将其合并为一个最终结果A
BinaryOperator<A> combiner();
// finisher用于将之前整合完的结果R转换成为A
Function<A, R> finisher();
// characteristics表示当前Collector的特征值,这是个不可变Set
Set<Characteristics> characteristics();
Collectors
Collectors
是一个工具类,是JDK预实现 Collector
的工具类,它内部提供了多种 Collector
,我们可以直接拿来使用,非常方便。
常用方法
方法名 | 功能 |
---|---|
toCollection | 将流中的元素全部放置到一个集合中返回 |
toList | 将流中的元素全部放置到一个 List 中返回,默认为 ArrayList |
toSet | 将流中的元素全部放置到一个 Set 中返回。默认为 HashMap |
joining | 将流中的元素以字符串序列的方式连接。可以指定连接符、前后缀 |
couting | 用于计数 |
泛型
泛型是 Java 中另一个使用非常广泛的特性,泛型中的「泛」指的是参数类型不固定,也就是说什么数据类型都可以,它还有另一个名字,就是「参数化类型」——也就是说不仅数据本身是参数,数据类型也可以被指定为参数——类、接口或者方法可以被不同类型的参数所重用。
注意:
- 泛型只能在编译阶段约束只能操作某种类型。
- 只支持引用数据类型,不支持基本数据类型。
- 如果要写基本数据类型,则需将其封装。
作用:在编译阶段约束了操作的数据类型,从而不会出现类型转换异常。
自定义泛型类
使用了泛型定义的类就是泛型类。
格式:
修饰符 class 类名<泛型变量>{}
定义泛型时,泛型变量一般使用 E、K、T、V、?
通常情况下,E、K、T、V,?是这样约定的:
E(element):代表 Element;
T(type):表示具体的类型;
K/V(key/value):分别代表键值对中的键和值;
? :表示不确定的类型。
自定义泛型方法
使用了泛型定义的方法就是泛型方法。详细用法不再赘述。
自定义泛型接口
使用了泛型定义的接口就是泛型。
一个例子
Box