Java集合框架介绍

第一章 集合的介绍

1.1 集合的定义

概述

java集合类存放在java.util包中,是一个用来存放对象的容器。

1.2 集合框架的定义

概述:

java集合框架是为表示和操作集合而规定的一种统一的体系结构,任何集合框架都包含三部分内容,分别是对外的接口、接口的实现和集合运算的算法。

1.3 数组和集合的区别

相同点:

都是容器,都可以存储多个数据。

不同点:

数组的长度是不可变的,集合的长度是可变的。

数组可以存储基本数据类型和引用数据类型,集合只能存储引用数据类型,要存储基本数据类型只能将它们转化成包装类才能存储。

第二章 Collection集合

2.1 Collection集合介绍

概述:

是单列集合的顶层接口,它表示一组对象,这些对象也可以叫做Collection元素。

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

创建Collection对象方式

多态的方式。

具体的实现类ArrayList。

Collection遍历方式:

迭代器介绍:

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

Iterator<E>Iterator(); 返回此集合中元素的迭代器。

Iterator的常用方法:

boolean hasNext();判断当前位置是否有元素可以被取出。

E next();获取当前位置的元素,将迭代器对象移向下一个索引位置。

增强for循环:

介绍:

它是JDK5之后出现的,其内部原理是一个Iterator迭代器。

实现Iterable接口的类才可以使用迭代器和增强for。

简化数组和Collection集合的遍历。

格式:

for(集合/数组中元素的数据类型 变量名 :  集合/数组名) {

​        // 已经将当前遍历到的元素封装到变量中了,直接使用变量即可

​    }

2.2 List集合介绍

概述:

有序集合,这里指存取有序。

有索引,按索引访问元素。

与Set集合不同,元素允许重复。

List集合的实现类子类:

ArrayList集合底层为数组,查询快增删慢。

LinkedList集合底层为链表,查询慢增删快。

2.3 泛型

概述:

泛型是JDK5引入的特性,它提供了编译时类型安全检查机制。

好处:

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

避免了强制类型转换。

泛型类:

修饰符 class 类名<类型>{}

泛型方法:

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

泛型接口:

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

类型通配符:

类型通配符: <?> 

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

但是并不能把元素添加到ArrayList中,获取出来也是父类类型。

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

ArrayList<?extends Number>:它表示Number或其子类。

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

ArrayList<?super Number>:它表示Number或其父类。

2.4 Set集合介绍

概述:

不可以存储重复元素,无序。

没有索引,不能使用for循环遍历。

TreeSet集合:

不可以存储重复元素,没有索引,无序。

可以将元素按照规则进行排序:

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

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

上述两个排序方式小结:

自然排序:自定义实现类Comparable接口,重写compareTo方法,根据返回值进行排序。

比较器排序:创建TreeSet对象时传递Comparator的实现类对象,重写compare方法,根据返回值进行排序。

在使用时默认使用自然排序,当自然排序不能满足现状的需求时,必须使用比较器排序。

两种方式中返回值的规则:

如果返回值为负数,表示当前存入的元素是较小值,存左边。
如果返回值为0,表示当前存入的元素跟集合中元素重复了,不存。
如果返回值为正数,表示当前存入的元素是较大值,存右边。

HashSet集合:

底层数据结构哈希表。

存储无序。

元素不重复。

没有索引,不能使用普通for循环遍历。

哈希值简介:

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

如何获取哈希值:

Object类中的public int hashCode():返回对象的哈希码值 。

哈希值的特点:

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

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

总结:

HashSet集合存储自定义类型元素,要想实现元素的唯一,要求必须重写hashCode方法和equals方法。

第三章 Map集合介绍

3.1 Map集合概述

概述

interface Map<K,V> K:键的类型 V:值的类型

特点:

双列集合,一个键对应一个值。

键不可以重复,值可以重复。

3.2 HashMap集合

HashMap底层是哈希表结构。

依赖hashCode方法和equals方法保证键唯一。

如果键要存储的是自定义对象,需要重写hashCode方法和equals方法。

3.3 TreeMap集合

TreeMap底层是红黑树结构。

依赖自然排序或比较器排序,对键进行排序。

如果键要存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象时给出比较器排序规则。

3.4 可变参数

可变参数介绍:

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

方法的参数类型确定,个数不确定,可以使用可变参数。

格式:

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

注意:

这里的变量其实是一个数组。

如果方法有多个参数,包含可变参数,可变参数要放在最后。

3.5 创建不可变集合

方法介绍:

在List,Set,Map接口中,都存在of方法,可以创建一个不可变集合。

这个集合不能添加,不能删除,不能修改。但是可以结合集合的带参构造,实现集合的批量添加。

在Map接口中,还有一个ofEntries方法可以提高代码的阅读性。

首先把键值对封装成一个Entry对象,再把这个Entry对象添加到集合中。

第四章 Stream流

4.1 Stream流思想

4.2 Stream流的三类方法

获取Stream:

创建一条流水线,并把数据放到流水线上准备操作。

中间方法:

流水线上的操作。

一次操作完毕之后,还可以继续进行其它操作。

终结方法:

一个Stream流只能有一个终结方法。

是流水线的最后一个操作。

4.3 生成Stream流的方式

Collection体系集合

使用默认方法stream()生成流,default Stream<E>stream()

Map体系集合

把Map转成Set集合,间接生成流。

数组

通过Arrays中静态方法stream生成流。

同种数据类型的多个数据

通过Stream接口静态方法of(T..values)生成流。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值