集合
1、集合是与数组类似,也是一种容器,用于装数据的。
2、集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。
3、集合非常适合做元素个数不确定,且要进行增删操作的业务场景。
4、集合的提供了许多丰富,而数组的功能很单一。
ArrayList集合
1、创建
//1、创建 ArrayList list = new ArrayList();
2、添加数据
//2、添加数据 list.add("小"); list.add("王"); list.add("同学"); list.add(22); //会有一个返回值,ArrayList一般不会添加失败 System.out.println(list.add("王"));//ture System.out.println(list);
泛型概述
ArrayList<E> 就是一个泛型类,可以再编译阶段约束集合对象只能操作某种数据类型。
例:
ArrayList<String>: 这个集合只能操作字符串类型的元素。
ArrayList<Integer>: 这个集合只能操作整数类型的元素。
注意不能写Int,只能写Integer!
ArrayList<Object>: 支持所有类型。
ArrayList的常用API
1、获取选定的索引
Object e = list.get(2); System.out.println(e);
2、获取集合的大小
System.out.println(list.size());
3、集合的遍历
for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); }
4、删除某个索引值得元素,并返回被删除的元素
System.out.println(list.remove(0));
System.out.println(list);
5、直接删除元素值,删除成功返回ture,失败返回false
System.out.println(list.remove("同学"));
System.out.println(list);
6、修改某个索引的元素
list.set(1, "陈");
System.out.println(list);
原码:
1 public class Demo1 { 2 public static void main(String[] args) { 3 //1、创建 4 ArrayList list = new ArrayList(); 5 6 //2、添加数据 7 list.add("小"); 8 list.add("王"); 9 list.add("同学"); 10 list.add(22); 11 12 //会有一个返回值,ArrayList一般不会添加失败 13 System.out.println(list.add("王"));//ture 14 15 System.out.println(list); 16 17 //3、指定索引插入 18 list.add(0, "大"); 19 System.out.println(list); 20 21 22 //API 23 //获取选定的那个 24 Object e = list.get(2); 25 System.out.println(e); 26 System.out.println("------------------"); 27 28 //获取集合的大小 29 System.out.println(list.size()); 30 System.out.println("------------------"); 31 32 //集合的遍历 33 for (int i = 0; i < list.size(); i++) { 34 System.out.println(list.get(i)); 35 36 } 37 System.out.println("------------------"); 38 39 //删除某个索引值处的元素,并返回被删除的元素 40 System.out.println(list.remove(0)); 41 System.out.println(list); 42 System.out.println("------------------"); 43 44 //直接删除元素值,删除成功返回ture,失败返回false 45 System.out.println(list.remove("同学")); 46 System.out.println(list); 47 System.out.println("------------------"); 48 49 //修改某个索引的元素 50 list.set(1, "陈"); 51 System.out.println(list); 52 } 53 }
案例:
1、集合中删除元素
1 public class Delete { 2 public static void main(String[] args) { 3 4 //删除80以下的 5 ArrayList<Integer> scores = new ArrayList<>(); 6 scores.add(98); 7 scores.add(77); 8 scores.add(66); 9 scores.add(89); 10 scores.add(79); 11 scores.add(50); 12 scores.add(100); 13 14 //方案一 15 //遍历 16 for (int i = 0; i < scores.size(); i++) { 17 int score = scores.get(i); 18 19 //i--是保证删除过后,回到这个位置,这样就不会跳过数据 20 if (score < 80){ 21 scores.remove(i); 22 i--; 23 } 24 } 25 System.out.println(scores); 26 System.out.println("-----------------------------"); 27 28 //方案二 29 ArrayList<Integer> scores2 = new ArrayList<>(); 30 scores2.add(90); 31 scores2.add(88); 32 scores2.add(50); 33 scores2.add(80); 34 scores2.add(87); 35 scores2.add(89); 36 scores2.add(45); 37 scores2.add(99); 38 39 //倒序遍历 40 for (int j = scores2.size() - 1; j >= 0; j--) { 41 int score2 = scores2.get(j); 42 43 if (score2 < 80){ 44 scores2.remove(j); 45 } 46 } 47 System.out.println(scores2); 48 } 49 }
存对象
1 /** 2 * 理解ArrayList集合存储自定义类型的对象 3 */ 4 5 class Movie{ 6 private String name; 7 private Double score; 8 private String ator; 9 10 public Movie(String name, Double score, String ator) { 11 this.name = name; 12 this.score = score; 13 this.ator = ator; 14 } 15 16 public String getName() { 17 return name; 18 } 19 20 public void setName(String name) { 21 this.name = name; 22 } 23 24 public Double getScore() { 25 return score; 26 } 27 28 public void setScore(Double score) { 29 this.score = score; 30 } 31 32 public String getAtor() { 33 return ator; 34 } 35 36 public void setAtor(String ator) { 37 this.ator = ator; 38 } 39 } 40 41 public class MovieTest { 42 public static void main(String[] args) { 43 //创建对象 44 Movie m1 = new Movie("《肖生克的救赎》", 9.7, "罗宾斯"); 45 Movie m2 = new Movie("《霸王别姬》", 9.7, "张国荣"); 46 Movie m3 = new Movie("《阿甘正传》", 9.7, "汤姆"); 47 48 //类型是Movie 49 ArrayList<Movie> movies = new ArrayList<Movie>(); 50 51 //添加对象到集合中 52 movies.add(m1); 53 movies.add(m2); 54 movies.add(m3); 55 56 //遍历 57 for (int i = 0; i < movies.size(); i++) { 58 Movie m = movies.get(i); 59 60 //输出 61 System.out.println("电影名:" + m.getName()); 62 System.out.println("电影评分:"+m.getScore()); 63 System.out.println("电影主演:"+m.getAtor()); 64 System.out.println("--------------------------"); 65 } 66 67 } 68 }
元素搜索:
1 /** 2 * 案例:学生信息系统,展示数据,并按照学号完成搜索 3 */ 4 5 class Student{ 6 private String id; 7 private String name; 8 private int age; 9 private String className; 10 11 public Student() { 12 } 13 14 public Student(String id, String name, int age, String className) { 15 this.id = id; 16 this.name = name; 17 this.age = age; 18 this.className = className; 19 } 20 21 public String getId() { 22 return id; 23 } 24 25 public void setId(String id) { 26 this.id = id; 27 } 28 29 public String getName() { 30 return name; 31 } 32 33 public void setName(String name) { 34 this.name = name; 35 } 36 37 public int getAge() { 38 return age; 39 } 40 41 public void setAge(int age) { 42 this.age = age; 43 } 44 45 public String getClassName() { 46 return className; 47 } 48 49 public void setClassName(String className) { 50 this.className = className; 51 } 52 53 54 55 /** 56 * 类比: ArrayList<Student>是类型 57 * 根据学生的学号查询学生对象返回 58 * 59 * @param students1 //存储全部学生对象的集合 60 * @param id1 //搜索的学生和学号 61 * @return //学生对象或者null 62 */ 63 public static Student getStudentById(ArrayList<Student> students1, String id1){ 64 //遍历全部学生对象 65 for (int i = 0; i < students1.size(); i++) { 66 Student s = students1.get(i); 67 68 //询问当前遍历的这个学生对象的学号,是否是我们要找的学号 69 if (s.getId().equals(id1)){ 70 //这个s代表的学生对象,就是我们要找的,返回它 71 return s; 72 } 73 } 74 return null; 75 } 76 } 77 78 public class Search { 79 public static void main(String[] args) { 80 81 //创建集合存储学生对象,创建学生对象封装学生信息 82 ArrayList<Student> students = new ArrayList<Student>(); 83 84 students.add(new Student("2019001", "小张", 22, "大数据")); 85 students.add(new Student("2019002", "小李", 21, "软件")); 86 students.add(new Student("2019003", "小何", 23, "数科")); 87 88 // \t缩进 89 System.out.println("学号\t\t姓名\t年龄\t专业"); 90 91 //遍历 92 for (int i = 0; i < students.size(); i++) { 93 //定义一个变量,接集合中的数据 94 Student s = students.get(i); 95 System.out.println(s.getId() + "\t" + s.getName() + "\t" + s.getAge() + "\t" + s.getClassName()); 96 97 } 98 99 //定义方法完成按照学号的搜索功能 100 Scanner sc = new Scanner(System.in); 101 while (true){ 102 System.out.println("请输入学号:"); 103 //接输入的学号,是String类型 104 String id1 = sc.next(); 105 //调用方法查询 106 Student s1 = Student.getStudentById(students, id1); 107 //判断s中是否存在学生对象地址 108 if (s1 == null){ 109 System.out.println("你输入的学号不正确!"); 110 }else { 111 System.out.println("该学号学生信息如下:"); 112 System.out.println(s1.getId() + "\t" + s1.getName() + "\t" + s1.getAge() + "\t" + s1.getClassName()); 113 } 114 } 115 } 116 }

浙公网安备 33010602011771号