目录
集合的概念
是一个容器, 可以存储多个数据, 通常用来替代数组的使用
集合的特点
-
只能存储引用类型
-
都来自于
java.util
包
三大集合: List,Set,Map都为接口
List存储特点
有序,有下标,元素可以重复
与数组特征完全一致
List的常用实现类
-
ArrayList (常用)
-
JDK1.2 底层数组实现 查询快,增删慢 线程不安全,效率高
-
-
LinkedList
-
JDK1.2 底层链表实现 查询慢,增删快 线程不安全,效率高
-
-
Vector(不用)
-
JDK1.0 底层数组实现 都慢 线程安全,效率低
-
创建
-
建议使用多态
List 集合名=new 实现类名();
常用方法
集合对象名.方法名(..)
-
void add(下标, 元素): 将元素添加到集合指定下标位置
-
boolean add(元素): 将元素添加到集合末尾
-
Object[] toArray(): 将集合转换为数组
-
boolean addAll(下标, 集合名): 将参数集合中的所有内容添加到当前集合指定下标位置
-
boolean addAll(集合名): 将参数集合中的所有内容添加到当前集合末尾
-
boolean contains(元素): 判断指定元素在集合中是否存在
-
boolean containsAll(集合名): 判断参数集合中的所有元素在当前集合中是否存在
-
元素 get(下标): 获取指定下标位置的元素
-
下标 indexOf(元素): 获取指定元素首次出现的下标, 不存在返回-1
-
lastIndexOf: 最后一次出现的下标
-
-
被删除的元素 remove(下标): 删除指定下标位置的元素
-
当集合元素为整数时, 传参时优先认定其为下标
-
-
boolean remove(元素): 删除指定元素
-
只会删除第一个匹配元素
-
-
旧元素值 set(下标, 新元素值): 将指定下标位置的元素替换为新元素值
-
int size(): 获取集合元素个数
泛型
语法
List<泛型> 集合名=new 实现类名<>();
作用
约束集合中存储的数据类型
使用
-
必须为引用类型
-
当需要存储基本类型时, 需要将泛型声明为其包装类型
-
左侧
<>
不可省略, 右侧<>
可以省略内容,但是不建议省略语法 -
可以将泛型声明为大类型, 则集合中可存储不同的小类型对象
List的遍历
-
下标遍历+get()
for(int i=0; i < 集合名.size(); i++){ //i: 下标 //通过集合名.get(i)获取当前遍历元素 }
-
迭代器遍历
-
集合名.iterator()
: 获取集合的迭代器对象 -
Iterator迭代器的使用:
-
boolean hashNext(): 判断是否存在下一元素
-
元素 next(): 使指针后移,获取下一元素
-
-
使用:
-
无法在迭代过程中增删元素
-
指针走向固定, 增删元素会导致获取结果有误
-
-
必须保证一次循环至多存在一次
next()
的调用
-
//1.获取集合的迭代器对象 Iterator<集合的泛型> it = 集合名.iterator(); //2.操作迭代器, 获取集合元素 while (it.hasNext()) {//循环条件: 存有下一元素 //指针后移一位: it.next() }
-
-
外遍历forEach
-
JDK5.0
-
本质仍为迭代器遍历, 所以遍历过程中不可增删元素
for(数据类型 元素名: 集合名){ //元素名随便起, 代表了当前正在被操作的元素 }
-
-
自遍历forEach
-
集合名.forEach(Consumer实现类对象)
-
JDK8.0
-
不能在操作过程中增删集合元素
//匿名内部类 集合名.forEach(new Consumer<集合泛型>() { @Override public void accept(集合泛型 参数名) { //参数名: 代表当前被操作的集合元素 } }); //lambda简化 list.forEach( 参数名->{对参数的操作} );
-
package com.by.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.function.Consumer; public class Test2 { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(11); list.add(20); list.add(33); list.add(40); list.add(55); //下标遍历 for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)+" "); } System.out.println(); //迭代器Iterator遍历 //1.获取集合的迭代器对象 Iterator<Integer> it = list.iterator(); //2.操作迭代器, 获取集合元素 while (it.hasNext()) {//循环条件: 存有下一元素 //指针后移一位: 输出偶数 //接收本次内容 Integer i = it.next(); if (i % 2 == 0) { System.out.print(i + " "); } //新增元素 // list.add(1, 60); 报错 } System.out.println(); //外遍历 for (Integer i : list) { System.out.print(i+" "); } System.out.println(); //自遍历 list.forEach(new Consumer<Integer>() { @Override public void accept(Integer i) { System.out.print(i+" "); } }); //lambda简化 list.forEach( i->System.out.print(i+" ") ); } }