一、集合框架 - 封装数据结构
要求:
1.方法的使用
2.原理的掌握
3.数据结构的实现
1.概念
集合是java提供的一种容器,主要负责存储“任意数量”的数据.
2.集合和数组的区别
1)相同点:都是容器,可以存储多个数据
2)不同点:
a.数组的长度是不可变的,集合的长度是可变的.
b.数组存储的是同一类型的元素,集合存储的都是对象。
c.数组可以存储基本数据类型和引用数据类型,集合能存储引用数据类型,如果要存储基本数据类型,则需要存储对应的“包装类”.
3.集合体系
Collection(I) - 单列集合
|- List(I)
|- ArrayList(C) - 数组
|- LinkedList(C) - 双向链表
|- Vector(C) - 数组
|- Set(I)
|- HashSet(C) - 散列表(哈希表)
|- SortedSet(I)
|- TreeSet(C) - 二叉树
|- Queue(I)
|- Deque(I)
|- LinkedList(C) - 双向链表
Map(I) - 双列集合
|- HashMap(C) - 散列表
|- LinkedHashMap(C) - 双向链表 + 散列表
|- HashTable(C) - 散列表
|- ConcurrentHashMap(C) - 散列表
|- SortedMap(I)
|- TreeMap(C) - 二叉树
________________________________________________
4、Collection(I) - 单列集合
1)创建方式
Collection con = new 实现类()
2)常用API
普通常用方法:
add(E e):添加
remove(Object):根据元素进行删除
size():获取集合长度
isEmpty():判断集合是否为空
clear():清空集合
跟集合相关方法:
boolean addAll(Collection<? extends E> c)
boolean containsAll(Collection<?> c)
boolean removeAll(Collection<?> c)
boolean retainAll(Collection<?> c)
跟数组相关方法:
集合转数组:
Object[] toArray()
<T> T[] toArray(T[] a)
数组转集合:
Arrays.asList()
5.Iterable(I)
1)有且只有一个iterator(),用于获取迭代器
2)Iterable是Collection集合的父接口,给该集合中的元素提供可遍历的方式.
3)Iterator(I) - 迭代器
a.Iterator是一个接口,他的作用就是用于遍历迭代所有的元素.
b.使用前提: 必须实现Iterable.
c.常用API
①.hasNext(): 询问有没有下一个元素
②.next(): 移动游标到下一个位置
③.remove(): 删除元素
4)foreach - 增强for循环- 简易版迭代器
a.JDK1.5之后出现的,其中原理就是实现了一个Iterator迭代器.
b.只有实现Iterable接口的类才能使用迭代器和增强for循环,进行遍历集合.
c.语法结构
for(集合/数组中元素的类型 变量名 : 要遍历的集合/数组 ){
}
d.作用:专门用于遍历/迭代集合或数组
缺点:只能用于获取集合中的元素,不能删除元素.
⭐泛型
1)概念
泛型本质上是提供类型的“类型参数”,也可以称之为参数化类型
我们可以给类、接口、变量、方法只当类型参数,可以通过参数限制操作的数据类型,从而保证类型转换的绝对安全。
2)泛型的作用:
强制了集合存储的固定的数据类型,提高了程序的安全性,避免了ClassCastException。
3)泛型的使用
(1)自定义泛型类
a.泛型类一般用于类中属性不太确定的情况下。
(2)泛型方法
a.是否拥有泛型方法,与其所在类是不是泛型类没有关系
b.如果是static方法需要使用泛型,则需要在方法上标记泛型。
(3)泛型接口
a.实现类实现接口,不实现泛型,在new的时候进行指定类型。
b.实现类实现接口的同时指定泛型,接口名<指定类型>
🌟通配符
通配符:当使⽤泛型类或者接⼝时,传递的数据中泛型类型不确定,可以通过通配符 表示。但是⼀旦使⽤泛 型的通配符后,只能使⽤Object类中的共性⽅法,集合中元素⾃身⽅法⽆法使⽤。
基本使用:
(1)泛型的上限与下限
上限:只能接收该类型及其⼦类 格式:类型名称<? extends 类> 对象名称
下限:只能接收该类型及其⽗类 格式:类型名称<? super 类> 对象名称
常考点: