JAVA学习笔记——集合的概念和习题

1、集合的概念

集合不能直接存储基本数据类型(转换为包装类可以存),可以存储引用数据类型,存储长度可以自动去增加或减少

成员方法:

在删除的时候,如果出现要删除的元素有相同的两个及以上的值,那么只删除前一个,后一个依然保留

返回的是被删除的元素的值

修改元素,第一个参数是索引值,第二个参数是要修改的值,运行之后成功修改

查询这个索引值对应的元素并输出

查询集合的长度 方法

2、习题

(1)遍历

代码如下:

复制代码
package com.xzhao.test.cat;

import java.util.ArrayList;

public class Together {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("abcdefg");
        list.add("hijklmn");
        list.add("opqrst");
        System.out.print('[');
        for (int i = 0; i < list.size(); i++) {
            if(i!=list.size()-1){
                System.out.print(list.get(i)+",");
            }
            else{
                System.out.print(list.get(i));
            }
        }
        System.out.println("]");


    }

}

结果如下:

(2)添加数字进行遍历

理论知识:

代码如下:

复制代码
ArrayList<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
System.out.print('[');
for (int i = 0; i < list.size(); i++) {
    if(i!=list.size()-1){
        System.out.print(list.get(i)+",");
    }
    else{
        System.out.print(list.get(i));
    }
}
System.out.println("]");

结果如下:

(3)添加学生对象并遍历

解题思路:首先创建一个学生类,将构造函数都弄好。之后在主程序中先创建3个对象,之后使用遍历的方法,输出的时候要使用get方法才能将元素的姓名和年龄都输出

代码如下:

学生类:

复制代码
package com.xzhao.test.cat;

public class Stud {
    private String name;
    private int age;

    public Stud() {
    }

    public Stud(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

主程序:
复制代码
ArrayList<Stud> list=new ArrayList<>();
Stud s1=new Stud("张三",18);
Stud s2=new Stud("李四",20);
Stud s3=new Stud("王五",22);
list.add(s1);
list.add(s2);
list.add(s3);
for (int i = 0; i < list.size(); i++) {
    Stud stu=list.get(i);
    System.out.println(stu.getName()+","+stu.getAge());//类是自己编写需要使用get方法才能输出姓名和年龄
}

结果如下:

在上述代码上添加信息是键盘输入:

代码如下:主要注意两个点,一个是创建学生对象要放在for循环里边,不然只会创建一个地址,后续会对同一个地址值里的内容进行覆盖

还有就是在输出信息的时候,直接输出显示的是地址值,应该使用get方法进行输出

复制代码
Scanner sc = new Scanner(System.in);
ArrayList<Stud> list=new ArrayList<>();
for(int i=0;i<5;i++){
    System.out.println("请输入第"+(i+1)+"个学生的姓名和年龄:");
    String name=sc.nextLine();
    int age=sc.nextInt();
    sc.nextLine();//清空缓冲区,由于在读取数据时,年龄输入之后按回车,age只读取数字,回车留在了缓冲区,导致下一个再次读取名字时,会将这个回车读入到姓名
    Stud stu=new Stud(name,age);
    list.add(stu);
}
for (int i = 0; i < list.size(); i++) {
    Stud stu=list.get(i);
    System.out.println(stu.getName()+","+stu.getAge());//类是自己编写需要使用get方法才能输出姓名和年龄
}

结果如下所示:

(4)添加用户对象并判断是否存在

解题思路:遍历比较看是否id值一致即可

代码如下:

复制代码
   ArrayList<User> list = new ArrayList<>();//因为是用户对象,所以前面的括号中是类的名称!
        User u1=new User(1,"zhangsan","123456");
        User u2=new User(2,"lisi","asdfgh");
        User u3=new User(3,"wangwu","123asd");
        list.add(u1);
        list.add(u2);
        list.add(u3);
        boolean flag=right(list,4);//定义一个方法判断是否存在id号一致的对象
        System.out.println(flag);
    }

    public static boolean right(ArrayList<User> lb,int n){
        for(int i=0;i<lb.size();i++){
            User u=lb.get(i);//新定义一个用户对象,将每个元素值赋值给u
            if(n==u.getId()){
                return true;
            }
        }
        return false;
    }
}

结果如下:

加一个需求:

解题思路:只需要更改方法中的return部分即可

代码如下;

结果如下:

(5)添加对象并返回数据

解题思路:主要难点在方法的类型应该定义成集合的类型,其余跟上面一样

代码如下:

手机类:

复制代码
package com.xzhao.test.cat;

public class Pho {
    private String brand;
    private int price;

    public Pho() {
    }

    public Pho(String brand, int price) {
        this.brand = brand;
        this.price = price;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

主程序:
复制代码
    ArrayList<Pho> list=new ArrayList<>();
    Pho p1=new Pho("小米",1000);
    Pho p2=new Pho("苹果",8000);
    Pho p3=new Pho("锤子",2999);
    list.add(p1);
    list.add(p2);
    list.add(p3);

    ArrayList<Pho> pp=information(list);
    for(int i=0;i<pp.size();i++){
        Pho p=pp.get(i);
        System.out.println(p.getBrand()+","+p.getPrice());
    }
}

public static ArrayList<Pho> information(ArrayList<Pho> li){
    ArrayList<Pho> Phone=new ArrayList<>();//返回的值不止一个值,可以放到集合中返回

    for(int i=0;i<li.size();i++){
        Pho p=li.get(i);
        if(p.getPrice()<3000){
            Phone.add(li.get(i));
        }
    }
    return Phone;
}

结果如下:

通过集合学到了很多之前数组不能做的事,譬如元素的删除,以及长度的定义,集合确实要更方便一些!!!

相关推荐
r i c k1 分钟前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦15 分钟前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
shandianchengzi1 小时前
【小白向】错位排列|图文解释公考常见题目错位排列的递推式Dn=(n-1)(Dn-2+Dn-1)推导方式
笔记·算法·公考·递推·排列·考公
浅念-1 小时前
C语言编译与链接全流程:从源码到可执行程序的幕后之旅
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
ZH15455891311 小时前
Flutter for OpenHarmony Python学习助手实战:API接口开发的实现
python·学习·flutter
爱吃生蚝的于勒1 小时前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
奶茶精Gaaa2 小时前
工具分享--F12使用技巧
学习
The森2 小时前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix
tq10862 小时前
Skills 的问题与解决方案
笔记
三水不滴2 小时前
有 HTTP 了为什么还要有 RPC?
经验分享·笔记·网络协议·计算机网络·http·rpc