java学习笔记17_集合、泛型、通配符

本文详细介绍了Java集合框架,包括Iterator接口及其常用方法、Collection、List、Set集合及其特点,深入讲解了HashSet、Map集合及Collections工具类。此外,还探讨了泛型的概念,包括自定义泛型类、方法、接口,通配符、extends和super的用法,以及泛型擦除。同时,分享了实际工作中关于集合任务和泛型任务的耗时报告和实现细节。
摘要由CSDN通过智能技术生成

学习内容

集合

Iterator

迭代器,是集合的专用遍历方式

常用方法
next()

返回迭代器的下一个元素。

hasNext()

如果集合中有更多元素,则返回true

使用迭代器遍历

如图,可以实现遍历打印的效果。

Iterator it =new Iterator();
while(it.hasNext()){
   
  System.out.println(it.next());
}

Collection 集合

  • Collection 集合是单例集合的顶层接口,它表示一组对象,这些对象也称为 Collection 的元素。
  • JDK 不提供此接口的任何直接实现,提供更具体的子接口实现,例如 SetList
常用方法
方法名 说明
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 中另一个使用非常广泛的特性,泛型中的「泛」指的是参数类型不固定,也就是说什么数据类型都可以,它还有另一个名字,就是「参数化类型」——也就是说不仅数据本身是参数,数据类型也可以被指定为参数——类、接口或者方法可以被不同类型的参数所重用。

注意:

  1. 泛型只能在编译阶段约束只能操作某种类型。
  2. 只支持引用数据类型,不支持基本数据类型。
  3. 如果要写基本数据类型,则需将其封装。

作用:在编译阶段约束了操作的数据类型,从而不会出现类型转换异常。

自定义泛型类

使用了泛型定义的类就是泛型类。

格式:

修饰符 class 类名<泛型变量>{}

定义泛型时,泛型变量一般使用 E、K、T、V、?

通常情况下,E、K、T、V,?是这样约定的:

E(element):代表 Element;

T(type):表示具体的类型;

K/V(key/value):分别代表键值对中的键和值;

? :表示不确定的类型。

自定义泛型方法

使用了泛型定义的方法就是泛型方法。详细用法不再赘述。

自定义泛型接口

使用了泛型定义的接口就是泛型。

一个例子

Box
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值