Java——ArrayList
数组与集合
一、数组和集合元素存储的个数问题
- 数组定义后类型确定,长度固定。
- 集合类型可以不固定,大小是可变的。
二、数组和集合的适合场景
- 数组适合做元素个数和类型确定的场景。
- 集合适合做数据个数不确定,且要做增删元素的场景。
ArrayList
一、ArrayList集合
- ArrayList是集合的一种,它支持索引。
二、ArrayList集合的对象创建与添加元素的方法
三、怎样统一ArrayList集合操作的元素类型
ArrayList常用API
public boolean remove(Object o) 默认删除集合里指定元素的第一个
Tips
tips1 从集合中遍历元素,并筛选出元素删除它,应该怎么解决?
-
- 从集合后面遍历然后删除,可以避免漏掉元素。
-
- 若从集合前面遍历,则每删除一个元素 计数器i–,避免跳过元素。
tips2 集合中存储的元素并不是对象本身,而是对象的地址。
实训练习
一、
package arrayListdeom;
import java.util.ArrayList;
public class test1 {
public static void main(String[] args) {
//创建一个ArrayLiat集合存储一个班级学生成绩
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);
/*把低于80的学生成绩从集合中删去
scores = [98, 77, 66, 89, 79, 50, 100]
0 1 2 3 4 5 6
*/
//两个方法选其一
//方法一
for(int i = 0 ; i < scores.size(); i++)
{
int score = scores.get(i);
if(score < 80)
{
//删除该分数
int m = scores.remove(i);
i--;//避免跳过元素
}
}
//方法二,从后开始遍历
for(int i = scores.size()-1 ; i >= 0 ; i--)
{
int score = scores.get(i);
if(score < 80)
{
//删除该分数
int m = scores.remove(i);
}
}
System.out.println("学生最终成绩表:"+ scores);
}
}
二、
创建的电影类
package arrayListdeom;
public class movie {
private String name;
private String score;
private String actor;
public movie(){
}
public movie(String name,String 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(String score){
this.score = score;
}
public String getScore(){
return score;
}
public void setActor(String actor){
this.actor = actor;
}
public String getActor(){
return actor;
}
}
package arrayListdeom;
import java.util.ArrayList;
public class test2 {
public static void main(String[] args) {
//1.定义一个电影类
//2.创建一个电影类ArrayList集合,创建三个电影对象,并存储到集合中
ArrayList<movie> movies = new ArrayList<>();
movies.add(new movie("《肖申客的救赎》","9.7","罗宾斯"));
movies.add(new movie("《霸王别姬》","9.4","张丰毅,张国荣"));
movies.add(new movie("《阿甘正传》","9.5","汤姆.汉克斯"));
//3.遍历电影类型的集合中的每个电影对象,访问它的信息即可
for(int i = 0 ; i < movies.size(); i++){
//i = 0 1 2
movie m = movies.get(i);
System.out.println("电影的名称是:"+ m.getName());
System.out.println("电影评分:"+ m.getScore());
System.out.println("演员:" + m.getActor());
System.out.println("------------------------");
}
}
}
三、
创建学生类
package arrayListdeom;
public class student {
private String number;
private String name;
private int age;
private String clas;
//无参构造器
public student() {
}
//有参构造器
public student(String number, String name, int age, String clas) {
this.number = number;
this.name = name;
this.age = age;
this.clas = clas;
}
public void setNumber(String number){
this.number = number;
}
public String getNumber(){
return number;
}
public void setName(String name) {
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void setClas(String clas){
this.clas = clas;
}
public String getClas(){
return clas;
}
}
package arrayListdeom;
import java.util.ArrayList;
import java.util.Scanner;
public class test3 {
public static void main(String[] args) {
//1.定义学生类
//2.创建一个学生类ArrayList集合,创建4学生对象,并存储到集合中
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,"神经科二班"));
//3.遍历学生信息并展示
System.out.println("学号\t\t姓名\t\t年龄\t\t班级");
for(int i = 0 ; i < students.size(); i++)
{
student s = students.get(i);
System.out.println(s.getNumber()+"\t"+s.getName()+"\t\t"+s.getAge()+"\t\t"+s.getClas());
}
//5.通过学号搜索学生
Scanner sc = new Scanner(System.in);
while(true)
{
System.out.println("请您输入学号查询对象:");
String r = sc.next();
student m = searchById(students,r);
//判断是否找到学生
if(m == null)
{
System.out.println("对不起,查无此人");
}else {
System.out.println("您查询的学生信息如下");
System.out.println(m.getNumber()+"\t"+m.getName()+"\t\t"+m.getAge()+"\t"+m.getClas());
}
}
}
//4.提供一个方法搜素并返回集合对象
public static student searchById(ArrayList<student> students, String number)
{//1.遍历全部学生对象
for(int i = 0; i < students.size(); i++)
{
student s = students.get(i);
//2.询问当前遍历的这个学生学号是否是我们要找的
if(s.getNumber().equals(number))
{
return s;
}
}
//查无此人
return null;
}
}