概述
- 与数组类似 是一种容器用于装数据
- 大小不固定 启动后可以动态变化 类型也可以选择不固定
- 适合于元素个数不固定 常进行增删操作的场景
- 集合也提供了非常丰富和好用的API和功能
Arraylist集合介绍
- Arraylist是集合的一种 它支持索引
- 创建Arraylist对象
//创建一个空集合对象
public Arraylist();
- 添加元素的方法
//将指定的元素追加到此集合的末尾
boolean add(E e);
//在此集合中指定位置插入指定元素
add(int index,E element);
- 试例
public static void main(String[] args) {
//创建Arraylist集合对象
ArrayList gather = new ArrayList();
//添加数据
gather.add("helloWorld");
gather.add("小老虎");
gather.add(123);
gather.add(1.2);
//输出
System.out.println(gather);
该位置执行效果:
[helloWorld, 小老虎, 123, 1.2]
//插入指定位置指定数据
gather.add(1,"老八");
System.out.println(gather);
该位置执行效果:
[helloWorld, 老八, 小老虎, 123, 1.2]
}
泛型概述
- 如Arraylist<E>就是一个泛型 以约束集合对象 只能操作某种数据类型
- 例如:
Arraylist<String>此集合只能操作字符串类型元素
Arraylist<Integer>此集合只能操作整数类型元素
基本类型 | 引用类型 |
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
集合只能存储引用类型 但不支持基本数据类型
public static void main(String[] args) {
//创建Arraylist集合对象 这里定义只能接收String类型数据
ArrayList<String> gather1 = new ArrayList(); //字符串泛型类
//添加数据
gather1.add("helloWorld");
gather1.add("小老虎");
//这里定义只能接收整数类型数据
ArrayList<Integer> gather2 = new ArrayList();
//添加数据
gather2.add(2);
gather2.add(3);
}
Arraylist常用API
E get(int index) | 返回指定索引处元素 |
int size() | 返回集合中元素个数 |
E remove(int index) | 删除指定索引处元素,返回被删除的元素 |
boolean remove(Object o) | 删除指定元素 返回删除是否成功 |
E set(int index,E element) | 修改指定索引元素 返回被修改的元素 |
public static void main(String[] args) {
//创建Arraylist集合对象 这里定义只能接收String类型数据
ArrayList<String> gather1 = new ArrayList(); //字符串泛型类
//添加数据
gather1.add("helloWorld");
gather1.add("小老虎");
gather1.add("嗨嗨ha");
gather1.add("老八蜜汁小憨包");
//E get(int index) 返回指定索引处元素
String e1 = gather1.get(2);
System.out.println(e1);
执行结果:
嗨嗨ha
//int size() 返回集合中元素个数
System.out.println(gather1.size());
执行结果:
4
//结合前两个完成集合遍历
for (int i = 0; i <gather1.size() ; i++) {
System.out.println(gather1.get(i));
}
执行结果:
helloWorld
小老虎
嗨嗨ha
老八蜜汁小憨包
//E remove(int index) 删除指定索引处元素,返回被删除的元素
String e2 = gather1.remove(2);
执行结果:
true
//boolean remove(Object o) 删除指定元素 返回删除是否成功 成功返回true 失败返回false
System.out.println(gather1.remove("helloWorld"));
执行结果:
小老虎
//int size(int index,E element) 修改指定索引元素 返回被修改的元素
String e3 = gather1.set(0,"小白兔");
System.out.println(e3);
System.out.println(gather1);
执行结果:
[小白兔, 老八蜜汁小憨包]
}
Arraylist API方法全览
方法 | 描述 |
add() | 将元素插入到指定位置的 arraylist 中 |
addAll() | 添加集合中的所有元素到 arraylist 中 |
clear() | 删除 arraylist 中的所有元素 |
clone() | 复制一份 arraylist |
contains() | 判断元素是否在 arraylist |
get() | 通过索引值获取 arraylist 中的元素 |
indexOf() | 返回 arraylist 中元素的索引值 |
removeAll() | 删除存在于指定集合中的 arraylist 里的所有元素 |
remove() | 删除 arraylist 里的单个元素 |
size() | 返回 arraylist 里元素数量 |
isEmpty() | 判断 arraylist 是否为空 |
subList() | 截取部分 arraylist 的元素 |
set() | 替换 arraylist 中指定索引的元素 |
sort() | 对 arraylist 元素进行排序 |
toArray() | 将 arraylist 转换为数组 |
toString() | 将 arraylist 转换为字符串 |
ensureCapacity() | 设置指定容量大小的 arraylist |
lastIndexOf() | 返回指定元素在 arraylist 中最后一次出现的位置 |
retainAll() | 保留 arraylist 中在指定集合中也存在的那些元素 |
containsAll() | 查看 arraylist 是否包含指定集合中的所有元素 |
trimToSize() | 将 arraylist 中的容量调整为数组中的元素个数 |
removeRange() | 删除 arraylist 中指定索引之间存在的元素 |
replaceAll() | 将给定的操作内容替换掉数组中每一个元素 |
removeIf() | 删除所有满足特定条件的 arraylist 元素 |
forEach() | 遍历 arraylist 中每一个元素并执行特定操作 |
案例一、遍历删除元素
要求:某个班级的考试在系统上进行 成绩大致为 98、75、64、87、76、54、100
需要把成绩低于80分的数据去掉
思路:1、定义Arraylist集合存储学生成绩
2、遍历集合每个元素 低于80则去掉
public static void main(String[] args) {
//建立一个Arraylist集合 用于存储数据
ArrayList<Integer> dates = new ArrayList();
//添加数据
dates.add(98);
dates.add(75);
dates.add(64);
dates.add(87);
dates.add(76);
dates.add(54);
dates.add(100);
//打印集合
System.out.println(dates);
//循环将低于80的数据去掉
for (int i = 0; i <dates.size(); i++) {
int da = dates.get(i);
if (da < 80){
dates.remove(i);
i--; //删除成功之后往后退一个位置 否则会跳过数据
}
}
System.out.println(dates);
}
案例二、存储自定义类对象
要求:某视频系统要存储三部电影 依次展示出来
思路:1、定义电影类 定义一个集合对象存储
2、创建三个电影对象 封装相关数据 将对象存入集合
3、遍历集合对象 输出相关信息
class aww{
private String name;
private double data;
private String actor;
//构造器
public aww(String name, double data, String actor) {
//定义电影类
this.name = name;
this.data = data;
this.actor = actor;
}
public aww() {
}
//getter and setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getData() {
return data;
}
public void setData(double data) {
this.data = data;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
public class zy1 {
public static void main(String[] args) {
//定义电影类
aww m1 = new aww("影片1",8.5,"001");
aww m2 = new aww("影片2",8.4,"002");
aww m3 = new aww("影片3",8.7,"003");
//创建电影类的Arraylist集合 存储三部电影对象
ArrayList<aww> moves = new ArrayList<>();
moves.add(m1);
moves.add(m2);
moves.add(m3);
//遍历电影类集合中的每个电影对象 输出视频信息
for (int i = 0; i < moves.size() ; i++) {
//i = 0 1 2
aww m = moves.get(i);
System.out.println("视频名称:"+m.getName());
System.out.println("视频评分:"+m.getData());
System.out.println("视频源:"+m.getActor());
System.out.println("-------------------------------------------");
}
}
}
执行结果:
视频名称:影片1
视频评分:8.5
视频源:001
-------------------------------------------
视频名称:影片2
视频评分:8.4
视频源:002
-------------------------------------------
视频名称:影片3
视频评分:8.7
视频源:003
-------------------------------------------
案例三、元素搜索
存储如下信息并展示 可以按照编号搜索到该信息
编号 | 昵称 | 年龄 | 就职 |
00001 | 老八 | 18 | 管理部 |
00002 | 小帅 | 21 | 办公部 |
00003 | 阿狗 | 20 | 财务部 |
00004 | 大米 | 19 | 经理部 |
思路:1、定义ArrayList集合存储如上信息 遍历展示出来
2、提供一个方法 接收ArrayList集合 和要搜索编号 返回编号所有信息
3、使用死循环 可以让用户可以不停搜索
//定义数据对象
class aww {
private String num;
private String name;
private int age;
private String AD;
//构造器
aww(String num, String name, int age, String ad) {
this.num = num;
this.name = name;
this.age = age;
AD = ad;
}
public aww(int i, String 老八, int age, String 管理部) {
}
//getter and setter
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAD() {
return AD;
}
public void setAD(String AD) {
this.AD = AD;
}
}
public class zy1 {
public static void main(String[] args) {
//创建存储数据对象 创建信息
ArrayList<aww> datass = new ArrayList<aww>();
datass.add(new aww("00001", "老八", 18, "管理部"));
datass.add(new aww("00002", "小帅", 21, "办公部"));
datass.add(new aww("00003", "阿狗", 20, "财务部"));
datass.add(new aww("00004", "大米", 19, "经理部"));
//遍历信息输出展示
for (aww s : datass) {
System.out.println(s.getNum() + "\t" + s.getName() + "\t" + s.getAge() + "\t" + s.getAD());
}
//设置扫描器输入
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入编号 查询信息:");
String num = sc.next();
//调用方法查询
aww b = getdata(datass, num);
//判断b中是否存在学生对象地址
if (b == null) {
System.out.println("空!");
} else {
System.out.println("查询出的信息为:");
System.out.println(b.getNum() + "\t" + b.getName() + "\t" + b.getAge() + "\t" + b.getAD());
}
}
}
//定义方法 按照编号搜索功能
/**
* 根据编号查询信息并返回
*
* @param das 存储全部信息集合
* @param unm 搜索编号
* @return
*/
private static aww getdata(ArrayList<aww> das, String unm) {
//遍历全部学生对象
for (aww u : das) {
//查询当前遍历对象的编号 是否是需要找到的编号
if (u.getNum().equals(unm)) {
return u;
}
}
//没有对应 对象
return null;
}
}