集合 ArrayList
集合
为什么要有集合?
数组已经创建是不可变的,集合是可变的,可后期添加。
集合添加后元素后长度会自动扩容。
集合和数组的对比:
-
长度
数组长度固定,集合长度可变
-
存储类型
数组可以存储基本数据类型和引用数据类型
集合只能存储引用数据类型,不能存储基本数据类型,如果要存储基本数据类型需要转换成对应的包装类进行存储。
ArrayList
//1.创建集合的对象
//泛型:限定集合中存储的数据类型 <Object>,引用数据类型,后面第二个<>内的数据类型声明可以不写,但是<>必须要有
//ArrayList<String> list = new ArrayList<String>();
//JDK7
//此时我们创建的是ArrayList对象,而ArrayList是java已经写好的一个类
//这个类在低层做了一些处理
//打印对象不是地址值,而是集合中存储数据内容
//在展示的时候会拿[]把所有的数据进行包裹
ArrayList<String> list = new ArrayList<>();
System.out.println(list);
ArrayList成员方法:
方法名 | 说明 |
---|---|
boolean add(E e) | 添加元素,返回值表示是否添加成功 |
boolean remove (E e) | 删除元素,返回值表示是否删除成功 |
E remove(int index) | 删除指定索引的元素,返回被删除的元素 |
E get(int index,E e) | 修改指定索引下的元素,返回原来的元素 |
E get(int index) | 获取指定索引下的元素 |
int size() | 集合的长度,也就是集合中元素的个数 |
package com.xx.mycollection;
import java.util.ArrayList;
/*
| boolean add(E e) | 添加元素,返回值表示是否添加成功 | 添加
| boolean remove (E e) | 删除元素,返回值表示是否删除成功 | 删除
| E remove(int index) | 删除指定索引的元素,返回被删除的元素 |
| E get(int index,E e) | 修改指定索引下的元素,返回原来的元素 | 修改
| E get(int index) | 获取指定索引下的元素 | 查询
| int size() | 集合的长度,也就是集合中元素的个数 | 获取长度
*/
public class ArrayListDemo02 {
public static void main(String[] args) {
//1.创建一个集合
ArrayList<String> list = new ArrayList<>();
//2.添加元素
list.add("aaa");
list.add("aaa");
list.add("bbb");
list.add("ccc");
System.out.println(list);
//3.删除元素
//一、根据内容删除
// boolean result = list.remove("aaa");
// System.out.println(result);
//
// boolean result2 = list.remove("ddd");
// System.out.println(result2);
//二、根据索引删除
// String str =list.remove(2);
// System.out.println(str);
//4.修改
/* String ddd = list.set(1, "ddd");
System.out.println(ddd);*/
//5.查询
/*
String s = list.get(2);
System.out.println(s);
*/
//遍历
for (int i = 0; i < list.size(); i++) {
//i 索引
//list.get(i) 元素
String s = list.get(i);
System.out.println(s);
}
System.out.println(list);
}
}
基本数据类型对应的包装类:
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
练习
添加学生对象进行遍历:
需求:定义一个集合,添加一些学生对象,并进行遍历
学生类的属性为:姓名,年龄
学生类Student
package com.xx.mycollection.test;
public class Student {
private int age;
private String name;
public Student() {
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student(int age, String name) {
this.age = age;
this.name = name;
}
}
main函数
package com.xx.mycollection.test;
import java.util.ArrayList;
public class Test03 {
public static void main(String[] args) {
//1.创建集合
ArrayList<Student> list = new ArrayList<>();
//2.创建学生对象
Student s1 = new Student(13,"张三");
Student s2 = new Student(14,"李四");
Student s3 = new Student(15,"王五");
//3.添加元素
list.add(s1);
list.add(s2);
list.add(s3);
//4.遍历集合
for (int i = 0; i < list.size(); i++) {
//i 索引 list.get(i) 元素/学生对象
Student stu = list.get(i);
System.out.println(stu.getAge()+","+stu.getName());
}
}
}
键盘输入学生信息:
package com.xx.mycollection.test;
import java.util.ArrayList;
import java.util.Scanner;
public class Test04 {
public static void main(String[] args) {
//1.创建集合
ArrayList<Student> list = new ArrayList<>();
//2.键盘录入学生的信息并添加到集合当中
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
Student s = new Student();
System.out.println("请输入学生的年龄:");
int age = scanner.nextInt();
System.out.println("请输入学生的姓名:");
String name = scanner.next();
//把name和age赋值给学生对象
s.setName(name);
s.setAge(age);
//把学生对象添加到集合中
list.add(s);
}
//3.b循环遍历输出集合中元素
for (int i = 0; i < list.size(); i++) {
Student s1 = list.get(i);
System.out.println(s1.getAge()+","+s1.getName());
}
}
}
添加用户对象并判断是否存在:
需求:
-
main 方法中定义一个集合,存入三个用户对象。
- 用户属性为:id,username,password
-
要求:定义一个方法,根据id查找对应的用户信息。
如果存在,返回true
如果不存在,返回false
package com.xx.mycollection.test; /*添加用户对象并判断是否存在: 需求: - main 方法中定义一个集合,存入三个用户对象。 - 用户属性为:id,username,password - 要求:定义一个方法,根据id查找对应的用户信息。 如果存在,返回true 如果不存在,返回false*/ import java.util.ArrayList; public class Test05 { public static void main(String[] args) { ArrayList<User> list = new ArrayList<>(); User user1 = new User(1,"张三","123"); User user2 = new User(2,"李四","456"); User user3 = new User(3,"王五","789"); list.add(user1); list.add(user2); list.add(user3); for (int i = 0; i < list.size(); i++) { User user = list.get(i); System.out.println(user.getId()+","+user.getUserName()+","+user.getPassword()); } System.out.println(new Test05().chazhao(list,4)); } public boolean chazhao(ArrayList<User> list,int id){ for (int i = 0; i < list.size(); i++) { User user =list.get(i); if (user.getId()==id){ return true; } } return false; } }
需求:
- 定义Javabean类:Phone
- Phone属性:品牌,价格
- main方法中定义一个集合,存入三个手机对象。
- 分别为:小米,1000;苹果8000;锤子2999。
- 定义一个方法,将价格低于3000的手机信息返回。
Phone类
package com.xx.mycollection.test;
public class Phone {
private String brand;
private int price;
public Phone() {
}
public Phone(String brand, int price) {
this.brand = brand;
this.price = price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
main方法类
package com.xx.mycollection.test;
/*
需求:
- 定义Javabean类:Phone
- Phone属性:品牌,价格
- main方法中定义一个集合,存入三个手机对象。
- 分别为:小米,1000;苹果8000;锤子2999。
- 定义一个方法,将价格低于3000的手机信息返回。
*/
import java.util.ArrayList;
public class Test07 {
public static void main(String[] args) {
//1.创建集合对象
ArrayList<Phone> list = new ArrayList<>();
//2.创建手机对象
Phone phone1 = new Phone("小米", 1000);
Phone phone2 = new Phone("苹果", 8000);
Phone phone3 = new Phone("锤子", 2999);
//3.添加数据
list.add(phone1);
list.add(phone2);
list.add(phone3);
//4.调用方法
ArrayList<Phone> phoneInfoList = getPhoneInfo(list);
//5.遍历集合
for (int i = 0; i < phoneInfoList.size(); i++) {
Phone phoneInfo = phoneInfoList.get(i);
System.out.println(phoneInfo.getBrand()+","+phoneInfo.getPrice());
}
}
//1.我要干嘛? 查询手机信息
//2.我干这件事情,需要什么才能完成? 集合
//3.我干完了,方法的调用处是否需要继续使用结果 返回
//技巧
//如果我们需要返回多个数据,可以把这些数据先放到一个容器当中,再把容器返回
//容器:集合 数组
public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list){
//定义一个集合用于存储价格低于3000的手机对象
ArrayList<Phone> resultList = new ArrayList<>();
//遍历集合
for (int i = 0; i < list.size(); i++) {
Phone phone = list.get(i);
//如果当前手机的价格低于3000,那么就把手机对象添加到resultList
if (phone.getPrice()<3000){
resultList.add(phone);
}
}
//返回resultList
return resultList;
}
}
集合架构
集合体系结构
List系列集合:添加的元素是有序、可重复、有索引。
Set系列集合:添加的元素是无序、不重复、无索引。
有序:存取的顺序是相同的。
可重复:集合中可以存储重复的内容。
有索引:可以通过索引获取集合中的每一个元素
Collection
Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。
方法名称 | 说明 |
---|---|
public boolean add(E e) | 把给定的对象添加到当前的集合中,返回值是布尔类型,说明添加成功 |
public void clear() | 清空集合中所有的元素 |
public boolean remove(E e) | 把给定的对象再当前集合中删除 |
public boolean contains(Object obj) | 判断当前集合中是否包含给定的对象 |
public boolean isEmpty() | 判断当前集合是否为空 |
public int size() | 返回集合中元素的个数/集合的长度 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!