JavaSE学习笔记-0225-ArrayList+案例

集合与数组类似,也是一种容器,用来装数据的。

数组的特点:数组定义完成并启动后,类型确定,长度固定

然而:在处理个数不确定且要进行增删数据操作的时候,使用数组是不太合适的。

这时集合的优点体现了出来,启动后可大小动态变化,类型也可以不固定,适合个数不确定且要进行增删操作的场景,也有着丰富的API。

ArrayList集合是集合的一种

AL集合支持索引

构造器:

public ArrayList()

使用

集合名.add(任何元素,这里数字直接输入,字符单引号,字符串双引号);

直接将其sout(集合名.add(任何元素,这里数字直接输入,字符单引号,字符串双引号));结果为一个布尔值,代表是否添加成功,一般都会添加成功。

而有索引的添加方式无返回值,不能sout

添加元素(有索引,无索引);

import java.util.ArrayList;

public class ArrayListDemo1 {
    public static void main(String[] args) {
        ArrayList na = new ArrayList();
        na.add("Java");
        na.add("Java");
        na.add("搭街坊卡拉");
        na.add(15);
        na.add(56.2);
        na.add('d');

        System.out.println(na);

        //为指定索引位置添加元素:要求索引大于已有长度,否则报错
        na.add(3,'四');
        System.out.println(na);
        //输出结果[Java, Java, 搭街坊卡拉, 15, 56.2, d]
        //[Java, Java, 搭街坊卡拉, 四, 15, 56.2, d]
        //可见插队到第四个位置,后面的位置依次后延一位
    }
}

ArrayList对泛型的支持

当想要对某种类型进行操作时,在集合后加<中间填想要操作的数据类型>

例如:

ArrayList<String>只能存储和操作字符串

ArrayList<lnteger>只能存储和操作整形

import java.util.ArrayList;

public class ArrayListDemo2 {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(12);
        list.add(12.2);//标红
    }
}

ArrayList常用API

定义String数据类型的集合如下:

public class ArrayListAPI {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("明月出天山");
        list.add("苍茫云海间");
        list.add("长风几万里");
        list.add("吹度玉门关");
        list.add("5b6n");
        list.add("asdf");
        list.add("qwer");
        list.add("zxcv");

1.获取某个索引位置对应的数据get

返回值类型为此处存储的数据类型

String el = list.get(0);
System.out.println(el);//结果为:明月出天山

2.获取集合的长度(元素个数)size

返回值类型为整型

int a = list.size();
System.out.println(a);//输出为8

3.集合的遍历

System.out.println(list);//就能全部输出,但是输出格式有逗号和中括号[,,,],而且不能对单个数据进行操作
System.out.println(a);//依次输出遍历,可以对单个数据操作
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

4.删除元素remove

输入索引位置,返回值:元素值

String de = list.remove(2);
System.out.println(de);//输出结果:长风几万里
System.out.println(list);//结果中少了上面那一句

输入欲删除元素,返回值:布尔值,

当欲删除元素出现多次,此代码默认只删掉第一个;

boolean de = list.remove("吹度玉门关");
        System.out.println(de);//结果为ture
        System.out.println(list.remove("吹度玉门关"));//结果为false

5.修改索引位置元素值set

返回值,被修改的数据

String e5 = list.set(4 , "汉下白登道");//第五个元素改为“汉下白登道”
        System.out.println(e5);//返回5b6n
        System.out.println(list);

案例,遍历和删除元素值

需求:

某班考试在系统上进行,成绩大致为98,77,66,89,79,50,100

现在要把成绩低于80分的数据从集合中去掉;

自写版:

import java.util.ArrayList;

public class ArrayListAnLi {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(98);
        list.add(77);
        list.add(66);
        list.add(89);
        list.add(79);
        list.add(50);
        list.add(100);
        System.out.println(list);
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i)<80){//这里int一个score = list.get(i);然后使用score判断较为规范
                list.remove(i);
            }
        }
        System.out.println(list);
    }
}

运行结果:

[98, 77, 66, 89, 79, 50, 100]
[98, 66, 89, 50, 100]

运行结束后,有一些元素没有被删除掉,发现余孽的特点都是前面有一个<80的元素将其掩护

于是在for循环下if条件中remove之后添加        i--;        可以实现功能

教程版本:

自写版修改前陷入经典套路

for循环从后往前遍历,也可以实现功能

案例,集合存储自定义元素并遍历

需求:保存电影名称,分值和主演,并依次展示出来;

自写版:

需要先写Movie库,使用JavaBean的格式写好Movie的class,注意JB格式属性写成private封装格式。自写创建对象直接使用全参构造器,把电影名,评分,主演三个属性直接赋给对象进行创建。

这时候输出list集合时(第10行)输出的实际上是class的地址而不是内容

import java.util.ArrayList;

public class ArrayListMovie {
    public static void main(String[] args) {

        ArrayList<Movie> movieInform = new ArrayList<>();
        movieInform.add(new Movie("《小沈阳的救赎》",9.7, "罗宾斯"));
        movieInform.add(new Movie("《霸王别姬》",9.6, "张国荣、张丰毅"));
        movieInform.add(new Movie("《阿甘正传》",9.5, "汤姆汉克斯"));
        System.out.println(movieInform);
        System.out.println("\t电影名\t\t评分\t主要演员");
        for (int i = 0; i < movieInform.size(); i++) {
            System.out.println(movieInform.get(i).getName()+"\t"+movieInform.get(i).getScore()+"\t"+movieInform.get(i).getActor());
        }
    }
}

想要输出内容要使用getter

案例:学生信息系统数据检索

要求:后台存储学生信息,要求可以按照学号检索出学生的信息、

自写版:
一个封装成JavaBean的student的class,一个主函数,两个方法:

package StringAndArrayList;

import sun.java2d.pipe.OutlineTextRenderer;

import java.util.ArrayList;
import java.util.Scanner;

public class ArrayListSerchStudentNumber {
    public static void main(String[] args) {
        student ns1 = new student(20180302,"叶孤城",23,"护理一班");
        student ns2 = new student(20180303,"东方不败",23,"推拿二班");
        student ns3 = new student(20180304,"西门吹雪",26,"中医药四班");
        student ns4 = new student(20180305,"梅超风",26,"神经科2班");
        ArrayList<student> list1 = new ArrayList<>();
        list1.add(ns1);
        list1.add(ns2);
        list1.add(ns3);
        list1.add(ns4);
        Scanner ns = new Scanner(System.in);
        boolean flag = true;
        OUT:
        while (flag) {
            System.out.println("输入1查询全部学生信息,输入2进入检索模式,输入0退出");
            int key = ns.nextInt();
            switch (key){
                case 1:
                    System.out.println("----------已选择1,输出全体学生信息----------");
                    viewAllStudentsInform(list1);
                    break;
                case 2:
                    System.out.println("----------已选择2,查询某一学号信息----------");
                    System.out.println("请输入欲检索学号:");
                    int serchnumber = ns.nextInt();
                    serchOneOfThem(list1,serchnumber);
                    break;
                case 0:
                    flag = false;
                    break OUT;
                default:
                    System.out.println("----------选择错误----------");
                    System.out.println("请重新输入");
            }
        }
        System.out.println("已退出系统");

    }
    public static void viewAllStudentsInform(ArrayList<student> list){
        System.out.println("=================全体学生信息==================");
        System.out.println("\t学号\t\t姓名\t\t\t年龄\t\t班级");
        for (int i = 0; i < list.size(); i++) {
            student ns = list.get(i);
            System.out.println(ns.getStuentNumber()+"\t"+ns.getName()+"\t\t"+ns.getAge()+"\t\t"+ns.getClasses());
        }
        System.out.println("=============================================");
    }
    public static void serchOneOfThem(ArrayList<student> list,int studentsNumber){
        System.out.println("===============学号"+studentsNumber+"检索结果==============");


        for (int i = 0; i < list.size(); i++) {
            student ns = list.get(i);
            if (studentsNumber==ns.getStuentNumber()){
                System.out.println("\t学号\t\t姓名\t\t\t年龄\t\t班级");
                System.out.println(ns.getStuentNumber()+"\t"+ns.getName()+"\t\t"+ns.getAge()+"\t\t"+ns.getClasses());
                System.out.println("=============================================");
                break;
            }else if (i== list.size()-1){
                System.out.println("==============数据库中没有录入该学号=============");
            }

        }


    }

}

教程版本:

使用String定义学号,                 遍历学号.equals(输入学号)判断学号是否符合;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值