【Java入门】集合体系(Collection集合,List集合,Set集合,Map集合,泛型,Collections工具)

目录

1. 集合概述

1.1 集合的体系结构:(集合需要通过具体的实现类来实现接口)

1.2 集合的遍历

1. lterator: (迭代器,集合的专用遍历方式)

2. for循环遍历(带有索引的遍历方式)

3. 增强for循环(最方便的遍历方式)

2.Collection集合

2.1 Collection集合概述

2.2 Collection常用方法

2.3 Collection集合的遍历(迭代器)

3.List集合

3.1 List集合概述和特点

3.2 List集合特有方法

3.3 List集合遍历

3.4 List子类集合的特点

4. Set集合

4.1 Set集合概述和特点

4.2 HashSet集合概述和特点

4.3 LinkedHashSet集合概述和特点

4.4 TreeSet集合概述和特点

5. 泛型

5.1 泛型概述

5.2 泛型分类

5.3 类型通配符

5.4 可变参数

6. Map集合

6.1 Map集合概述和使用

6.2 Map集合的功能

6.3 Map集合的遍历方法

7.Collections类


1. 集合概述

提供一种存储空间可变的存储模型,存储的数据容量可以发生改变

1.1 集合的体系结构:(集合需要通过具体的实现类来实现接口)

1.2 集合的遍历

1. lterator: (迭代器,集合的专用遍历方式)

lterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到

迭代器是通过集合的iterator()方法得到的,所以我们说它是依赖于集合而存在的

lterator中的常用方法:

E next(): 返回迭代中的下一个元素

boolean hasNext(): 如果迭代具有更多元素,则返回true

2. for循环遍历(带有索引的遍历方式)

3. 增强for循环(最方便的遍历方式)

简化数组和Collection集合的遍历,实现lterable接口的类允许其对象成为塔强型for语句的目标内部原理是一个lterator迭代器

格式:

for(元素数据类型变量名:数组或者Collection集合){

//在此处使用变量即可,该变量就是元素

}

2.Collection集合

2.1 Collection集合概述

是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素

JDK不提供此接口的任何直接实现。它提供更具体的子接口(如Set和List)实现

创建Collection集合的对象

  1. 多态的方式
  2. 具体的实现类ArrayList

Collection<Student> co = new ArrauList<Student>();

2.2 Collection常用方法

注意:

  1. co.add(); 返回值输出永远为true
  2. 可以存储重复的元素

2.3 Collection集合的遍历(迭代器)

3.List集合

3.1 List集合概述和特点

1. List集合概述

有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置

用户可以通过整数索引访问元素,并搜索列表中的元素

与Set集合不同,列表通常允许重复的元素

2. List集合特点

有序: 存储和取出的元素顺序一致

可重复: 存储的元素可以重复

3.2 List集合特有方法

3.3 List集合遍历

1. 遍历的两种方法

2.并发修改异常

ConcurrentModificationException

产生原因:

迭代器遍历的过程中,通过集合对象修改了集合中元素的长度,造成了迭代器获取元素中判断预期修改值和实际修改值不一致

解决方案:

用for循环遍历,然后用集合对象做对应的操作即可

3. Listlterator(列表特有的迭代器)

用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置

解决了并发修改异常的问题

Listlterator中的常用方法:

E next(): 返回迭代中的下一个元素

boolean hasNext(): 如果迭代具有更多元素,则返回true

E previous(): 返回列表中的上一个元素

boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true

void add(E e): 将指定的元素插入列表

3.4 List子类集合的特点

ArrayList: 底层数据结构是数组,查询快,增删慢

LinkedList: 底层数据结构是链表,查询慢,增删快

1. ArrayList集合(数组)

ArrayList<String>,ArrayList<Student>

2. LinkedList集合(链表)

4. Set集合

4.1 Set集合概述和特点

1.Set集合特点

  1. 不包含重复元素的集合
  2. 没有带索引的方法,所以不能使用普通for循环遍历
  3. 用HashSet实现接口,HashSet:对集合的迭代顺序不作任何保证(输出顺序无序)

Set < E> set = new HashSet<E>();

2. 哈希值

哈希值: 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值

Object类中有一个方法可以获取对象的哈希值

public int hashCode(): 返回对象的哈希码值

对象的哈希值特点:

同一个对象多次调用hashCode()方法返回的哈希值是相同的

默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同

4.2 HashSet集合概述和特点

1.HashSet集合特点

  1. 底层数据结构是哈希表
  2. 对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
  3. 没有带索引的方法,所i以不能使用普通for循环遍历
  4. 由于是Set集合,所以是不包含重复元紊的集合

2.HashSet添加一个元素的过程

要保证元素的唯一性,则需要重写hashCode()和equals()方法

4.3 LinkedHashSet集合概述和特点

  1. 哈希表和链表实现的Set接口,具有可预测的迭代次序
  2. 由链表保证元素有序,也就是说元素的存储和取出顺序是一致的
  3. 由哈希表保证元素唯一,也就是说没有重复的元素

4.4 TreeSet集合概述和特点

1.TreeSet集合特点

  1. 元素有序,这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法

TreeSet(): 根据其元素的自然排序进行排序

TreeSet(Comparator comparator):根据指定的比较器进行排序

  1. 没有带索引的方法,所以不能使用普通for循环遍历
  2. 由于是Set集合,所以不包含重复元素的集合

2. 自然排序和比较器排序

a.自然排序(Comparable)

用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序

对元素进行排方的自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(To)方法

重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写

b. 比较器排序(Comparator)

用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的

比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(To1,T o2)方法

重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写

5. 泛型

5.1 泛型概述

泛型提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数

参数化类型:

将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型

这种参数类型可以用在类、方法和接口中,分别被称为泛型类、泛型方法、泛型接口

泛型定义格式:

<类型>: 指定一种类型的格式(形参)

<类型1,类型2...>∶指定多种类型的格式,多种类型之间用逗号隔开(形参)

将来具体调用时候给定的类型可以看成是实参,并且实参的类型只能是引用数据类型

泛型的好处:

把运行时期的问题提前到了编译期间

避免了强制类型转换

5.2 泛型分类

1.泛型类

格式: 修饰符 class 类名 <类型> {}

范例: public class Generic <T> {}

此处T可以随便写为任意标识。常见的如T、E、K、V等形式的参数常用于表示泛型

2. 泛型方法

格式: 修饰符<类型>返回值类型方法名(类型变量名) {}

范例: public <T> void show(T t) { }

3. 泛型接口

格式: 修饰符 interface 接口名<类型>{}

范例: public interface Generic<T>{ }

实现接口: public class GeneriImpl <T> implement Generic <T>{

@Override

}

5.3 类型通配符

为了表示各种泛型List的父类,可以使用类型通配符.类型通配符:<?>

List<?>:表示元素类型未知的List,它的元素可以匹配任何的类型

这种带通配符的List仅表示它是各种泛型List的父类,并不能把元紊添加到其中

如果说我们不希望List<?>是任何泛型List的父类,只希望它代表某一类泛型List的父类,可以使用类型通配符的上限

类型通配符上限: <? extends类型>

List<? extends Number>: 它表示的类型是Number或者其子类型

类型通配符下限: <? super类型>

List<? super Number> : 它表示的类型是Number或者其父类型

5.4 可变参数

1. 可变参数的概述

可变参数又称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了

格式: 修饰符返回值类型方法名(数据类型...变量名){}

范例: public static int sum(int...a)[ ]

注意: 这里的变量其实是一个数组

一个方法中只能定义一个可变参数,如果一个方法有多个参数,包含可变参数,要先声明其他参数,可变参数要放在最后

2.可变参数的使用方法

a. Arrays工具类中有一个静态方法: (只能修改元素,不能增删元素)

public static <T> List<T> asList(... a):返回由指定数组支持的固定大小的列表

b. List接口中有一个静态方法: (增删改都不行)

public static <E> List<E> of(... elements):返回包含任意数量元素的不可变列表

c. Set接口中有一个静态方法: (没有修改方法,元素唯一)

public static <E> Set<E> of(... elements):返回一个包含任意数量元素的不可变集合

6. Map集合

6.1 Map集合概述和使用

Map集合概述:

lnterface Map<K V> K:键的类型; V:值的类型

将键映射到值的对象;不能包含重复的键;每个键可以映射到最多一个值举例:学生的学号和姓名

创建Map集合的对象

  1. 多态的方式
  2. 具体的实现类HashMap

6.2 Map集合的功能

1. 基本功能

2. 获取功能

6.3 Map集合的遍历方法

1. 方式一

  1. 获取所有键的集合。用keySet()方法实现
  2. 遍历键的集合,获取到每一个键
  3. 用增强for实现根据键去找值。用get(Object key)方法实现

2.方式二

  1. 获取所有键值对对象的集合Set<Map.Entry<K,V> > entrySet():
  2. 获取所有键值对对象的集合遍历键值对对象的集合,得到每一个键值对对象
  3. 用增强for实现,得到每一个Map.Entry根据键值对对象获取键和值
  4. 用getKey0)得到键,用getValue()得到值

7.Collections类

是针对集合操作的工具类

Collections类的常用方法:

public static <T extends Comparable<? super T>> void sort(List<T> list):将指定的列表按升序排序

public static void reverse(List<?> list): 反转指定列表中元素的顺序

public static void shuffle(List<?> list): 使用默认的随机源随机排列指定的列表

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值