一.集合概述
数组的特点:
- 数组定义完成启动后,类型确定、长度固定。
- 在个数不能确定,且要进行增删数据操作的时候,数组是不太适合的。
集合的特点:
- 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。
- 集合非常适合做元素个数不确定,且要进行增删操作的业务场景。
- 集合还提供了许多丰富的API,而数组的功能很单一。
二.ArrayList集合入门
1.ArrayList集合
- ArrayList集合是集合中的一种,它支持索引。
package com.api.arraylist;
import java.util.ArrayList;
public class ArrayListDemo1 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Java");
list.add("MySQl");
list.add("SSM");
list.add("SSM");
list.add(23);
list.add(56.78);
System.out.println(list.add('中'));
System.out.println(list);
list.add(2,"javaweb");
System.out.println(list);
}
}
2.ArrayList对于泛型的支持
- ArrayList<E>:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据结构。
- ArrayList<String>:此集合只能操作字符串类型的元素。
- ArrayList<Integer>:此集合只能操作整数类型的元素。
- 泛型只能支持引用数据类型,不能支持基本数据类型。
- 使用泛型:<数据类型>
- 创建集合对象都应该使用泛型
package com.api.arraylist;
import java.util.ArrayList;
public class ArrayListDemo2 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("MySQL");
ArrayList<Integer> list2 = new ArrayList<>();
list2.add(23);
list2.add(67);
ArrayList<Object> list3 = new ArrayList<>();
}
}
3.ArrayList集合常用方法
package com.api.arraylist;
import java.util.ArrayList;
public class ArrayListDemo3 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Java");
list.add("MySQL");
list.add("MyBatis");
list.add("HTML");
String e = list.get(3);
System.out.println(e);
System.out.println(list.size());
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println(list);
String e2 = list.remove(2);
System.out.println(e2);
System.out.println(list);
System.out.println(list.remove("Java"));
System.out.println(list);
String e3 = list.set(2,"MySQL");
System.out.println(e3);
System.out.println(list);
}
}
4.ArrayList集合案例
案例一:遍历并删除元素
需求:
- 某个班级的考试在系统上面进行。成绩大致为:98,77,66,89,79,50,100
- 现在需要先把成绩低于80分以下的数据去掉
分析:
- 定义ArrayList集合存储多名学员的成绩。
- 遍历集合每个元素,如果元素值低于80分,去掉它。
import java.util.ArrayList;
public class ArrayListDemo1 {
public static void main(String[] args) {
ArrayList<Integer> scores = new ArrayList<>();
scores.add(98);
scores.add(77);
scores.add(66);
scores.add(89);
scores.add(79);
scores.add(50);
scores.add(100);
System.out.println(scores);
for(int i = 0;i < scores.size();i++){
int score = scores.get(i);
if(score < 80){
scores.remove(i);
i--;
}
}
System.out.println(scores);
for(int i = scores.size() - 1;i >= 0;i--){
int score = scores.get(i);
if(score < 80){
scores.remove(score);
}
}
System.out.println(scores);
}
}
案例二:存储自定义类型的对象
需求:某影院系统需要在后台存储上述三部电影,然后依次展示出来。
分析:
- 定义一个电影类,定义一个集合存储电影对象
- 创建3个电影对象,封装相关数据,把这三个对象存入到集合中去
- 遍历集合中的3个对象,输出其相关信息

public class Movie {
private String name;
private double score;
private String actor;
public Movie(){
}
public Movie(String name,double score,String actor){
this.name = name;
this.score = score;
this.actor = actor;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setScore(double score){
this.score = score;
}
public double getScore(){
return score;
}
public void setActor(String actor){
this.actor = actor;
}
public String getActor(){
return actor;
}
}
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<Movie> movies = new ArrayList<>();
movies.add(new Movie("《肖生客的救赎》",9.7,"罗宾斯"));
movies.add(new Movie("《霸王别姬》",9.6,"张国荣"));
movies.add(new Movie("《阿甘正传》",9.5,"汤姆汉克斯"));
System.out.println(movies);
for(int i = 0;i < movies.size();i++){
Movie movie = movies.get(i);
System.out.println("片名" + movie.getName());
System.out.println("评分:" + movie.getScore());
System.out.println("主演:" + movie.getActor());
System.out.println("----------------------------");
}
}
}

ArrayList集合案例三:元素搜索

需求:
- 后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能。
分析:
- 定义Student类,定义ArrayList集合存储如上学生信息,并遍历展示出来。
- 提供一个方法,同时可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生信息,并展示。
- 使用死循环,让用户可以不停的搜索。
package com.api.arraylist;
public class Student {
private String studyId;
private String name;
private int age;
private String className;
public Student() {
}
public Student(String studyId, String name, int age, String className) {
this.studyId = studyId;
this.name = name;
this.age = age;
this.className = className;
}
public String getStudyId() {
return studyId;
}
public void setStudyId(String studyId) {
this.studyId = studyId;
}
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 getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
package com.api.arraylist;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListTest6 {
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("20180302", "叶孤城" ,23 , "护理一班"));
students.add(new Student( "20180303", "东方不败",23 , "推拿二班"));
students.add(new Student( "20180304", "西门吹雪" ,26 , "中医药四班"));
students.add(new Student( "20180305", "梅超风" , 26, "神经科2班"));
System.out.println("学号\t\t\t\t姓名\t\t\t年龄\t\t班级");
for(int i = 0;i < students.size(); i++){
Student s = students.get(i);
System.out.println(s.getStudyId() + "\t\t" + s.getName() + "\t\t" + s.getAge() + "\t\t" + s.getClassName());
}
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请您输入要查询的学号:");
String id = sc.next();
Student s = getStudentByStudyId(students,id);
if(s == null){
System.out.println("查无此人!");
}else{
System.out.println("您要查询的学生信息如下:");
System.out.println("学号\t\t\t\t姓名\t\t\t年龄\t\t班级");
System.out.println(s.getStudyId() + "\t\t" + s.getName() + "\t\t" + s.getAge() + "\t\t" + s.getClassName());
}
}
}
public static Student getStudentByStudyId(ArrayList<Student> students,String studyId){
for(int i = 0;i < students.size();i++){
Student s = students.get(i);
if(s.getStudyId().equals(studyId)){
return s;
}
}
return null;
}
}
