Java集合

当我们使用数组的时候,遇到最多的问题就是怎么数组空间总是不够用,或者是只能存一种数据类型,当我们的数组存满了,如果还想往里面放东西,那么只能重新建立一个更长数组,将原数组的值复制到新数组,再往新数组添加数据,然后返回新数组。这个过程很繁琐,且容易出错。

而集合就类似于数组,并且集合解决了数组长度不够的这一缺点,但也有自己的缺点。

集合的优点:长度不固定,集合在创建出来之后的初始长度为0,随着往里面添加数据,那么集合就会自动扩容。

集合的缺点:集合可以存储的数据类型不固定,当集合中存在多种数据类型的数据时,不好遍历集合。

集合使用的语法:

ArrayList  list=new ArrayList();     //这种方式创建的集合可以存放不同数据类型的数据

创建存放同种类型数据的集合:

ArrayList<String> list=new ArrayList<String>();           //创建字符串类型的集合

集合的成员方法

例如上面创建的字符串类型集合list

list.add("字符串")向集合种添加元素(返回值时boolean类型,添加成功返回true)

list.remove("字符串")

list.remove(int index)

删除集合中这个字符串,若有多个相同的,则从0开始遍历,删除第一个,删除成功返回true

删除集合中index索引的元素,删除成功,则返回被删除的元素

list.set(int index,新值)将集合中index索引的值修改为 新值,方法返回的是被修改掉的旧值
list.get(int index)将集合中index索引的值返回
list.size()计算集合的长度并将长度返回
        ArrayList<String> list=new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");    //添加字符类型数据,若添加成功则返回true,否则返回false
        System.out.println(list);
        list.remove("aaa");    //从0索引开始遍历集合,将遇到的第一个“aaa”删除,删除成功则返回true,删除失败返回false
        System.out.println(list);
        //删除一个元素之后,集合的长度会自动减小,此时集合长度就为4了,而不会向数组一样如果不手动将后面的数据迁移,那么这个位置就为空了
        System.out.println(list.size());    //list.size()就是统计集合的长度
        String str=list.remove(0);    //根据索引去删除集合中的元素
        System.out.println(str);       //集合根据索引删除元素这个成员方法返回的是被删除的元素
        System.out.println(list);      //输出删除元素后集合
        System.out.println(list.size());
        String str2=list.set(1,"eee");  //将集合中1索引的元素替换成新的值“eee”,并将被删除的元素返回,赋值给str2
        System.out.println(str2);
        System.out.println(list);

 

 注:如果集合要存储基本数据类型数据时,ArrayList<>里面<>中的数据类型,除了int和char类型之外,其他的基本数据类型都是将首字母大写。而 int 和 char 分别为 Integer 和 Character。

 练习题

学生管理系统

建立一个学生类,学生的属性有ID,姓名,年龄,出生日期

功能:

1、增加学生

2、根据ID去删除学生

3、根据ID查找学生

4、显示所有学生信息

5、根据ID修改学生信息

6、退出系统

部分功能实现:

    //添加学生
    public static void studentAdd(ArrayList<Student> list) {
        System.out.print("请输入你要添加的学生个数:");
        int number = scanner.nextInt();
        for (int i = 0; i < number; i++) {
            Student student = new Student();
            System.out.println("请输入第" + (i + 1) + "个学生的信息:");
            System.out.print("ID:");
            long id;
            while (true) {
                id = scanner.nextLong();
                boolean flag = true;     //定义判断学生的id是否已经存在的标志
                for (int j = 0; j < list.size(); j++) {
                    if (list.get(j).getId() == id) {
                        flag = false;
                        System.out.println("ID已存在,请重新输入ID");
                        break;
                    }
                }
                if (flag) {
                    break;
                }
            }
            student.setId(id);

            System.out.print("姓名:");
            String name = scanner.next();
            student.setName(name);

            System.out.print("年龄:");
            int age = scanner.nextInt();
            student.setAge(age);

            System.out.print("出生日期:");
            String birthDate = scanner.next();
            student.setBirthDate(birthDate);

            list.add(student);
        }
        System.out.println("添加成功!");
    }
    //修改学生信息
    public static void studentModify(ArrayList<Student> list) {
        if (list.size() == 0) {
            System.out.println("无法修改,还没有学生信息哦");
        } else {
            System.out.print("请输入需要修改的学生ID:");
            long id = scanner.nextLong();    //要修改的学生id
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).getId() == id) {
                    System.out.println("请重新输入这个学生的信息:");
                    System.out.print("ID:");
                    long newId;      //定义一个新的ID变量,用来存储输入的新的ID号
                    boolean flag = false;
                    while (true) {
                        newId = scanner.nextLong();
                        for (int j = 0; j < i; j++) {
                            if (list.get(j).getId() == newId) {
                                System.out.println("修改失败,ID已存在,请重新输入");
                                flag = true;
                            }
                        }
                        for (int j = i + 1; j < list.size(); j++) {
                            if (list.get(j).getId() == newId) {
                                System.out.println("修改失败,ID已存在,请重新输入");
                                flag = true;      //再学生中找到除了这个学生之外有学生的ID跟跟新的newId相同,那么就跟新标签flag为true,表示有相同ID已存在了
                            }
                        }
                        if (!flag || newId == list.get(i).getId())   //如果flag=false,表示ID除了这个学生本身的ID之外没有重复的,那么就将这个newId跟新到学生的ID
                        {
                            break;
                        }
                    }
                    list.get(i).setId(newId);
                    System.out.print("姓名:");
                    list.get(i).setName(scanner.next());
                    System.out.print("年龄:");
                    list.get(i).setAge(scanner.nextInt());
                    System.out.print("出生日期:");
                    list.get(i).setBirthDate(scanner.next());
                    System.out.println("修改成功!");
                    return;
                }
            }
            //遍历完所有学生都没找到这个id号的学生,那么提示每日找到这个id号的学生
            System.out.println("没有ID号为" + id + "的学生!");
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值