第六章 工具包
一,集合
1,定义:集合是将许多元素组合成一个单元的容器对象
2,可用于存储/检索/操作/传输/聚合数据
二,集合框架
1,定义:用于表示操作集合的体系结构
2,集合框架应该包含
(1)接口:表示集合的抽象数据类型,使用接口,允许集合独立于其表示的细节进行操作
(2)实现:集合接口的具体实现,包含可重用的数据结构
(3)算法:对集合执行搜索/排序等操作,是可以重用的数据结构
三,小知识点
1,Iterable接口
(1)java.lang.Iterable
(2)可以看到这个接口是java.lang包下的,在java.lang的这个包内的接口是不用report的可以直接用
(3)Iterable接口,实现了此接口类的对象,支持Foreach循环语句
(4)在java8之后,添加基于函数式编程的foreach()方法
(5)Iterable接口不属于java集合框架
2,Collection(集合)接口
(1)java.util.Collection
(2)一个集合,表示一组被称为元素的对象
(3)Collection接口,用于描述,最具通用性的集合。因此,也包含了最具通用性集合的操作方法
(4)Collection接口继承自Iterable接口,所以集合类型均支持foreach循环语句
3,概念图
(1)Iterable接口并不是集合
(2)核心集合接口(Collection),包含了多种不同类型的集合(List)(Queue)(Set)
(3)以及多种不同数据结构的实现类(图片中黄色的都是实现类)
4,集合内的基本操作
boolean add(E e) //向集合添加元素,如调用更改了集合返回true,否则就返回false
boolean addAll(Collection <?extends E> c) //可以向集合中添加一个集合或者集合内的具体集合类型
boolean remove(Object o) //在集合中移除指定元素,移除后在集合中被移除了,内存中依旧存在
boolean removeAll(Object <? extends E> c) //从集合移除包含指定的集合
void clear() //移除集合内的所有元素
boolean contains(Object o) //判断集合内是否包含指定的元素
boolean containsAll(Collection<?extends E> c)//判断是否包含指定集合
boolean isempty() //判断集合中是否包含元素
int size() //集合长度
T[] toArray(T[] a) //将集合转为指定类型的数组
Iterator<E>iterator() //获取迭代器
5,泛型
(1)定义:泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型
(2)本质:参数化类型,也就是说所操作的数据类型被指定为一个参数
(3)解释:我们有一个玻璃杯(集合)不关心里面装的是什么,但是执行者需要知道装的是什么。
(4)使用泛型的原因:集合并不关系元素的具体类型,因此设计使用泛型
四,List集合接口
1,位置:java.util.List
2,定义:List集合,存放有序的,允许包含重复元素的集合。
3,方法:
//从Collection继承的方法
void add(int index,E element) //插入一个元素在index的位置,后面的元素顺序移动
E set(int index, E element) //将在index位置的那个元素替换成后面的元素
E get(int index) //获取index位置的元素
E remove(int index) //移除index位置的元素
4,List 集合接口实现常用实现类,即不同的数据结构
(1)java.util.ArrayList类,基于对象数组数据结构的实现
(2)java.util.LinkedList类,基于双向链表数据结构的实现
(3)注意:具体区别、使用场景、性能,基于功能进行选择
5,例子
(1)例子1,定义List集合,并且插入一个元素
import java.util.ArrayList;
import java.util.List;
public class Test{
public static void main(String[] args) {
List<String> strings = new ArrayList<>();
//第一个<>确定了List中应该放的元素类型,应该是字符串类型
//第二个<>没有放,因为在java 7 之后的版本后面不写相当于直接找前面的类型
//这个List集合的实现就是依赖于数组实现的
strings.add("java"); //向List集合中加入字符串java
strings.add(12); //这个地方会报错,因为要加入的元素和之前泛型内定义的不一致
}
}
(2)基于集合进行操作