JavaDay7(集合)

集合

集合是一种容器,储存数据,类似于数组

但集合大小可变,开发中更多

ArrayList类(需要导包)

底层数组装不下后自动扩容出一个新数组将数据转移

集合和数组的使用选择

数组:存储的元素个数固定不变
集合:存储的元素个数经常发生改变

构造方法

public ArrayList() 创建空集合容器

ArrayList List = new ArrayList();  //可以添加任意类型
list.ad("张三");
List.add("李四");
list.add("王五");

ArrayList<String> list = new ArrayList<String>(); //<>内可以限定数据类型

成员方法

  • 增:

public boolean add(E e) :将指定的元素添加到此列表的尾部

public void add(int index, E element) :在指定索引位置,添加对应的元素(插队)

public E remove(int index) :根据索引做删除,返回被删除掉的元素

public boolean remove(0bject o) :根据元素做删除,返回是否删除成功的状态

public E set(int index, E element) :修改指定索引位置,为对应的元素,返回被覆盖掉的元素

以上方法,返回值通常不做接收

public E get(int index) : 根据索引,获取集合中的元素

public int size() : 返回集合中元素的个数.

/*
需求:创建一个存储String的集合,内部存储(test, 张三,李四,test, test)字符串
删除所有的test字符串,删除后,将集合剩余元素打印在控制台
*/
public static void main(String[] args) {
	ArrayList<String> list = new ArrayList<>();
	list.add("test");
	list.add("张三");
	list.add("李四");
	list.add("test");
	list.add("test");
    
	for (int i = 0; i<list.size();i++) {
		String s = list.get(i);
		if("test".equals(s)){
		list.remove(i);
		i--;                //做筛查删减案例时,由于集合的自动补缺性质,1)每删除成功一个元素索引要-1 		
		}
    }
     for(int i =list.size()-1;i>=0;i--){   // 2)倒着遍历集合
		String s = list.get(i);
		if("test".equals(s)){
		list.remove(i) ;
		}
	}
}

签到系统案例(完成第三周作业时使用集合编写的初步代码)


import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Scanner;

public class AppUse {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<People> list= new ArrayList<>();  //签到、签退、查看都围绕集合操作

        lo:
        while (true) {
            System.out.println("--------欢迎来到签到系统--------");
            System.out.println("请输入当前所需操作");
            System.out.println("1.签到 2.签退 3.查看签到表 4.退出系统:/请输入你的选择");
            String option = sc.next();
            switch (option) {
                case "签到":
                    signIn(list);
                    break;
                case "签退":
                    signOut(list);
                    break;
                case "查看签到表":
                    showList(list);
                    break;
                case "退出系统":
                    System.out.println("感谢您的使用,再见。");
                    break lo;  //停止while循环
                default:
                    System.out.println("请输入正确信息");
            }
        }
    }
/*此方法用于录入姓名与签到时间*/
    private static void signIn(ArrayList<People> list) {
        //录入姓名
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入签到姓名:");
        String name1="";
        while(true){//循环判断姓名是否存在
            name1 = sc.next();
            int index = getIndex(name1,list);
            if(index==-1) {
                //名字不重复,可以使用
                break;
            }else {  //姓名以存在
                System.out.println("已签到,请勿重复签到。");
            }
        }
        //生成签到时间
        LocalTime signIn = LocalTime.now();
        //生成空的签出时间
        LocalTime signOut = LocalTime.of(00, 00, 00);
        //封装
        People guy = new People(name1, signIn, signOut);
        //添加进集合
        list.add(guy);
        System.out.println("签到成功!");
    }

/*此方法用于根据名字签退及添加签退时间*/
    private static void signOut(ArrayList<People> list) {
        //录入名字
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入签退姓名:");
        String name2 = sc.next();
        //调用getIndex方法
        int index = getIndex(name2,list);
        //判断是否-1,根据索引签退或抛出异常
        if(index==-1){
            System.out.println("查无此人,请重新输入:");
        }else{
            //姓名存在,根据索引添加登出时间
            LocalTime signOut = LocalTime.now();
            //重新获取一次签到时间以便封装
            LocalTime signIn = list.get(index).getSignIn();
            //将签到时间、签退时间和姓名封装为People对象
            People guy = new People(name2,signIn,signOut);
            //修改集合中的元素为新封装的guy
            list.set(index,guy);
            System.out.println("签退成功!");

        }
    }

/*此方法用于查看签到表*/
    private static void showList(ArrayList<People> list) {
        if(list.size()==0){
            System.out.println("查无信息");
        }else {
            System.out.println("姓名\t\t\t签到时间\t\t\t\t签退时间\t\t\t\t历经时长");
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i).getName()
                        +"\t\t\t"+list.get(i).getSignIn()
                        +"\t\t"+list.get(i).getSignOut());
            }
        }
    }

/*此方法用于根据姓名查找索引*/
    private static int getIndex(String name,ArrayList<People> list) {
        //遍历集合,获取每一个姓名
        for (int i = 0; i < list.size(); i++) {
            People guy = list.get(i);
            //对比取出的姓名和要查找的姓名
            if (guy.getName().equals(name)) {
                //找到了
                return i;

            }
        }
        //没找到,返回-1
        return -1;
    }
}


import java.time.LocalTime;

public class People {
    private String name;    //用新版时间类操作,最后需要类型转换
    private LocalTime signIn; //签退时间 同上
    private LocalTime signOut;

    public People(String name, LocalTime signIn, LocalTime signOut) {
        this.name = name;
        this.signIn = signIn;
        this.signOut = signOut;
    }

    public String getName() {
        return name;
    }


    public LocalTime getSignIn() {
        return signIn;
    }


    public LocalTime getSignOut() {
        return signOut;
    }



/**
     * 使用构造方法完成对象初始化或者getter和setter方法初始化对象都可以
     */

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LU-Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值