一、集合介绍
集合是一种容器,用来装数据的,类似于数组。
集合与数组的区别:
- 数组定义完成并启动后,长度就固定了
- 集合大小可变,开发中用的更多
集合与数组的使用选择:
- 数组:存储的元素个数固定不变
- 集合:存储的元素个数经常发生改变
二、ArrayList 集合
1. ArrayList 集合的创建
构造方法:public ArrayList()
基本格式:ArrayList<引用数据类型> 对象名 = new ArrayList<>();
注意:
<> 代表泛型,使用泛型可以对集合中存储的数据进行类型限制,并且泛型中不允许编写基本数据类型,但如果集合中需要使用到整数、小数、字符等数据,则需要使用基本数据类型所对应的包装类,转化为引用数据类型:
基本数据类型 | 对应包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
2. ArrayList 集合的添加
例如1:创建一个集合容器,内部存储 11.1、22.2、33.3
public static void main(String[] args) {
ArrayList<Double> list = new ArrayList<>();
list.add(11.1);
list.add(22.2);
list.add(33.3);
System.out.println(list);
}
运行结果为:
[11.1, 22.2, 33.3]
例如2:创建一个集合容器,内部存储 张三、李四、王五
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
System.out.println(list);
}
运行结果为:
[张三, 李四, 王五]
3. ArrayList 集合的常用成员方法
4. ArrayList 集合的遍历
实例1:创建一个存储字符串的集合,内部存储3个字符串元素,使用程序实现在控制台遍历该集合。
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
System.out.println(s);
}
}
运行结果为:
张三
李四
王五
实例2:创建一个存储字符串的集合,内部存储字符串元素{钢门吹雪,西域狂鸭,真年末黛西,李四}使用程序实现在控制台遍历该集合,将4个字的人名打印在控制台。
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("钢门吹雪");
list.add("西域狂鸭");
list.add("真年末黛西");
list.add("李四");
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
if (s.length() == 4){
System.out.println(s);
}
}
}
运行结果为:
钢门吹雪
西域狂鸭
实例3:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合。
public static void main(String[] args) {
//3个学生对象
Student stu1 = new Student("张三",18);
Student stu2 = new Student("李四",19);
Student stu3 = new Student("王五",18);
//存储学生对象的集合
ArrayList<Student> list = new ArrayList<>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
//遍历该学生对象集合
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getName() + " " + stu.getAge());
}
}
运行结果为:
张三 18
李四 19
王五 18
实例4:创建一个存储学生对象的集合,存储3个学生对象,在控制台展示出年龄低于18岁的年龄信息。
public static void main(String[] args) {
//3个学生对象
Student stu1 = new Student("张三",15);
Student stu2 = new Student("李四",19);
Student stu3 = new Student("王五",16);
//存储学生对象的集合
ArrayList<Student> list = new ArrayList<>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
//遍历该学生对象集合
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
if (stu.getAge() < 18){
System.out.println(stu.getName() + " " + stu.getAge());
}
}
}
运行结果为:
张三 15
王五 16
实例5:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合,其中学生的姓名和年龄来自于键盘录入。
import java.util.ArrayList;
import java.util.Scanner;
public class TestDemo03 {
public static void main(String[] args) {
//准备集合容器,用于存储学生对象
ArrayList<Student> list = new ArrayList<>();
for (int i = 1; i <= 3; i++) {
System.out.println("这是第" + i + "个学生");
addStudent(list);
}
//遍历集合,打印学生信息
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getName() + " " + stu.getAge());
}
}
//添加学生信息
public static void addStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的姓名:");
String name = sc.next();
System.out.println("请输入学生的年龄:");
int age = sc.nextInt();
Student stu = new Student(name,age);
list.add(stu);
}
}
运行结果为:
这是第1个学生
请输入学生的姓名:
张三
请输入学生的年龄:
18
这是第2个学生
请输入学生的姓名:
李四
请输入学生的年龄:
19
这是第3个学生
请输入学生的姓名:
王五
请输入学生的年龄:
20
张三 18
李四 19
王五 20
实例6:创建一个存储 String 的集合,内部存储(test,张三,李四,test,test)字符串,删除所有的test字符串,删除后,将集合剩余元素打印在控制台。
import java.util.ArrayList;
public class TestDemo04 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("test");
list.add("张三");
list.add("李四");
list.add("test");
list.add("test");
/*
在删除集合元素时,每删除一个元素后,集合内部出现了空缺,集合会将后面的元素往前填充
解决该问题有两种方式:
1.每删除一个集合元素时,让记录当前删除位置的变量-1
2.倒序删除
*/
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
if ("test".equals(s)){
list.remove(i);
i--;
}
}
/* 倒序删除
for (int i = list.size(); i > 0; i--) {
String s = list.get(i);
if ("test".equals(s)){
list.remove(i);
}
}
*/
System.out.println(list);
}
}
运行结果为:
[张三, 李四]
实例7:定义一个方法,方法接收一个集合对象(泛型为Student),方法内部将年龄低于18的学生对象找出,并存入新集合对象,方法返回新集合。
import java.util.ArrayList;
public class TestDemo05 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
list.add(new Student("张三",25));
list.add(new Student("李四",17));
list.add(new Student("王五",14));
ArrayList<Student> list1 = select(list);
for (int i = 0; i < list1.size(); i++) {
Student stu = list1.get(i);
System.out.println(stu.getName() + " " + stu.getAge());
}
}
public static ArrayList<Student> select(ArrayList<Student> list){
//创建新的集合容器,准备存储筛选后的学生对象
ArrayList<Student> list1 = new ArrayList<>();
//遍历集合
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
//筛选
if (stu.getAge() < 18){
//符合条件的学生对象存储到新的集合容器中
list1.add(stu);
}
}
return list1;
}
}
运行结果为:
李四 17
王五 14