53.【Java 集合】

80 阅读3分钟

集合

1.ArrayList 集合《非键值》

这个包装类在java.util.*的包中.直接可以以引用

1.1.集合的泛型

因为集合里面只能存在引用数据类型(String)也就是包装类,而不能是基本数据类型(int double float) 。所以我们在定义集合的时候要引用泛型这个概念来协助我们的正常工作。泛型的定义格式:

ArrayList<泛型数据类型> s=new ArrayList<>();

1.2默认[]对数据进行包裹

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello  {
    public static void main(String []avgs) {
        ArrayList<String> s=new ArrayList<>();
        System.out.println(s);  //在展示的时候会拿一个[]对集合的数据进行包裹
    }
}

在这里插入图片描述

1.3.集合的增删改查

在这里插入图片描述

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello  {
    public static void main(String []avgs) {
        //创建集合
        ArrayList<String> s=new ArrayList<>();
        //添加元素
        s.add("aa");
        s.add("bb");
        s.add("cc");
        s.add("dd");
        //在指定位置添加元素
        s.add(3,"ee");
        //根据元素删除元素
        s.remove(0);
        //根据元素删除元素
        s.remove("bb");
        //修改
        s.set(0,"tt");
        //获取指定索引
        System.out.println(s.get(0));     
        System.out.println(s);  //在展示的时候会拿一个[]对集合的数据进行包裹
    }
}

在这里插入图片描述

1.4基本数据类型,转换成包装类

在这里插入图片描述
输出int型的数据类型:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello  {
    public static void main(String []avgs) {
        //创建集合
        ArrayList<Integer> s=new ArrayList<>();
        //添加元素
        s.add(1);
        s.add(2);
        s.add(3);
        s.add(4);
        System.out.println(s);  //在展示的时候会拿一个[]对集合的数据进行包裹
    }
}

在这里插入图片描述

1.5添加对象类

主类:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello  {
    public static void main(String []avgs) {
        //创建集合
        ArrayList<Student> s=new ArrayList<>();
        Student s1=new Student("lisi",21);
        Student s2=new Student("zs",22);
        Student s3=new Student("liming",25);
        //添加元素
        s.add(s1);
        s.add(s2);
        s.add(s3);
        System.out.println(s);  // 这样直接遍历的是地址
        for(int i=0;i<s.size();i++){
            Student stu=s.get(i);  //依次得到s1,s2,s3
            System.out.println(stu.getName()+" "+stu.getAge());
        }
    }
}

方法类:

public class Student {
    private String name;
    private int age;
    public Student() {
    }
    public Student(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;
    }
}

在这里插入图片描述

1.6手动输入类的成员信息

基本思路:先对成员函数进行赋值, 然后把类对象添加到集合中去

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello  {
    public static void main(String []avgs) {
        //创建集合
        ArrayList<Student> s=new ArrayList<>();  //集合
        Scanner sc=new Scanner(System.in);
      for(int i=0;i<3;i++){  //因为集合的数量我们不清楚,所以要手动操作
          Student stu=new Student();   //放在这里目的是为了进行一次可以初始化一次.
          System.out.println("请输入您的姓名:");
          String name=sc.next();
          stu.setName(name);
          System.out.println("请输入您的年龄:");
          int age=sc.nextInt();
           stu.setAge(age);
           //添加对象
          s.add(stu);
      }
        System.out.println(s);  // 这样直接遍历的是地址
        for(int i=0;i<s.size();i++){
            Student stu=s.get(i);  //依次得到s1,s2,s3
            System.out.println(stu.getName()+" "+stu.getAge());
        }
    }
}

在这里插入图片描述
注意事项: new一次一个地址
在这里插入图片描述

1.7通过查找比对相等输出成员信息

题目描述:有三个对象,成员分别有 ID PASSWORLD NAME三个成员变量,现在我们通过指定的ID 对集合进行查找,如果集合里面存在的话,那么我们就把这个ID的所有信息 罗列出来。否则的话,我们就不进行罗列。让他们重新输入整确的信息为止。

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello  {
    public static void main(String []avgs) {
        //创建集合
    ArrayList<User> us=new ArrayList<>();
    User u1=new User("吉士先生","l21032114",121788);
    User u2=new User("小哈喇子","w21032114",121789);
    User u3=new User("大聪明","t21032114",121777);
    //添加集合:
        us.add(u1);
        us.add(u2);
        us.add(u3);
        System.out.println("请输入您的Id");
        Scanner sc=new Scanner(System.in);
        while(true) {
            try {   //在这里进行异常处理的操作,
                String id=sc.next();
                User s = Judge(us, id);
                System.out.println("用户名是:" + s.getName() + " " + "ID是:" + s.getId() + " " + "密码是:" + s.getPassworld());
                break;
            } catch (Exception e) {
                System.out.println("您输入的信息不存在!请重试!!:");
            }
        }
    }
    //设置成员方法,目的是为了减少空间的占用情况
    public static User Judge(ArrayList<User> us,String id){
        for(int i=0;i<us.size();i++){
            User s=us.get(i);   //对集合遍历得到的是一个对象
            if(s.getId().equals(id)){
                return s;
            }
        }
        return null;
    }
}

在这里插入图片描述

1.8通过价格查找在某个范围的情况下输出所有信息:

基本思路,在方法的时候。新建一个集合。假如说元素满足条件的话。就让这个元素放到一个新的集合里面,最后返回新的集合,就好了。

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello  {
    public static void main(String []avgs) {
        //创建集合
    ArrayList<User> us=new ArrayList<>();
    User u1=new User("吉士先生","l21032114",3500);
    User u2=new User("小哈喇子","w21032114",2200);
    User u3=new User("大聪明","t21032114",3100);
    //添加集合:
        us.add(u1);
        us.add(u2);
        us.add(u3);
        ArrayList<User> s = Judge(us);
        for(int i=0;i<s.size();i++) {
            User k=new User();
             k=s.get(i);
             System.out.println("用户名是:" + k.getName() + " " + "ID是:" + k.getId() + " " + "密码是:" + k.getPassworld());
         }
        }
    public static ArrayList<User> Judge(ArrayList<User> us){
        ArrayList<User> m=new ArrayList<>();
        for(int i=0;i<us.size();i++){
            User s=us.get(i);   //对集合遍历得到的是一个对象
            int price=s.getPassworld();  //得到价格
            if(price>3000){
                m.add(s);
            }
        }
        return m;
    }
}

在这里插入图片描述

1.9寻找最大值并返回最大值的所有信息:

工具类:

   public static Student FindMaxScore(ArrayList<Student> stu){
        double max;
        Student s=stu.get(0);
        max=s.getScore();
        for(int i=1;i<stu.size();i++){
            Student s1=stu.get(i);
            double num=s1.getScore();
            if(num>max){
                s=s1;    //对象拷贝
            }
        }
        return s;

    }

JavaBean类:

public class Student {
    private String name;
    private double score;
    private String ID;

    public Student() {
    }

    public Student(String name, double score, String ID) {
        this.name = name;
        this.score = score;
        this.ID = ID;
    }

    public String getName() {
        return name;
    }

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

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }
}

测试类:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String[] avgs) {
     ArrayList<Student> stu=new ArrayList<>();
     Student s=new Student("吉士先生",94.3,"256dsd");
     Student s1=new Student("小姐也",56.6,"22222d");
     Student s2=new Student("大聪明",96.3,"11111d");
     stu.add(s);
     stu.add(s1);
     stu.add(s2);
     Student s3=Util.FindMaxScore(stu);
        System.out.println("最大值的信息是:"+s3.getName()+" "+s3.getScore()+" "+s3.getID());
    }
}

在这里插入图片描述

2.学生管理系统:

在这里插入图片描述

1.swithc()语句的注意事项:

在这里插入图片描述
在这里插入图片描述

2.全部代码展示:

主类:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    static int idex=0;
    public static void main(String[] avgs) {
        //定义集合操作
        ArrayList<Student> stu=new ArrayList<>();
        //进行初始话页面的操作
        System.out.println("*****************大聪明管理系统*****************");
        System.out.println("\t1.添加学生");
        System.out.println("\t2.删除学生");
        System.out.println("\t3.修改学生");
        System.out.println("\t4.学生图鉴");
        System.out.println("\t5.查询学生");
        System.out.println("\t6.退出");
        //进行用户选择的操作
        Loop:while (true) {   //命名这个循环的名字叫做Loop
            System.out.println("请输入您要的操作选项:");
            Scanner sc=new Scanner(System.in);
            int Select=sc.nextInt();
            switch (Select){
                case 1:
                    //在这里设置一个类的对象,目的是每进行一次开辟一个新的空间
                    Student s=new Student();

                    System.out.println("*****************进入添加系统*****************");
                    System.out.println("请输入您添加的姓名、性别、学号、分数:");
                    //进行手动输入的操作
                    String name=sc.next();
                    String age=sc.next();
                    int ID=sc.nextInt();
                    double score=sc.nextDouble();
                    //进行对象的初始化的操作
                    s.setName(name);
                    s.setAge(age);
                    s.setID(ID);
                    s.setScore(score);
                    //进行集合添加的操纵
                    stu.add(s);
                    break;
                case 2:
                    System.out.println("*****************进入删除系统*****************");
                    System.out.println("请输入您要删除人的ID");
                    int id1=sc.nextInt();
                    try {
                        Student s1=Select(stu,id1);
                        System.out.println("删除的信息是:");
                        System.out.println("\t"+s1.getName()+"\t"+s1.getAge()+"\t"+s1.getID()+"\t"+s1.getScore());
                        stu.remove(s1);
                    } catch (Exception e) {
                        System.out.println("您输入的数字不存在赛");
                    }
                    break;
                case 3:
                    System.out.println("*****************进入修改系统*****************");
                    System.out.println("请您输入您要修改的学生的原先ID");
                    int id2=sc.nextInt();
                    try {
                        Student s1=Select(stu,id2);
                        System.out.println("您要修改的原先ID是:");
                        System.out.println("\t"+s1.getName()+"\t"+s1.getAge()+"\t"+s1.getID()+"\t"+s1.getScore());
                        //设置修改对象
                        Student s3=new Student();
                        System.out.println("请输入您修改的姓名、性别、学号、分数:");
                        //进行手动输入的操作
                        String name1=sc.next();
                        String age1=sc.next();
                        int ID3=sc.nextInt();
                        double score1=sc.nextDouble();
                        //进行对象的初始化的操作
                        s3.setName(name1);
                        s3.setAge(age1);
                        s3.setID(ID3);
                        s3.setScore(score1);
                        //进行修改操作
                        stu.set(idex,s3);
                    } catch (Exception e) {
                        throw new RuntimeException(e);
                    }
                    break;
                case 4:
                    System.out.println("*****************进入学生图鉴系统*****************");
                    System.out.println("全部的成员信息是:*");
                    System.out.println("\t姓名"+"\t性别"+"\t学号"+"\t分数");
                    for(int i=0;i<stu.size();i++){
                        Student s1=stu.get(i);  //得到具体的对象名字
                        System.out.println("\t"+s1.getName()+"\t"+s1.getAge()+"\t"+s1.getID()+"\t"+s1.getScore());
                    }
                    break;
                case 5:
                    System.out.println("*****************进入单项查询系统*****************");
                    System.out.println("请您输入您要查询的ID:");
                    int id=sc.nextInt();
                    try {
                        Student s1=Select(stu,id);
                        System.out.println("\t"+s1.getName()+"\t"+s1.getAge()+"\t"+s1.getID()+"\t"+s1.getScore());
                    } catch (Exception e) {
                        System.out.println("您输入的ID不存在,删除失败");
                    }
                    break;
                case 6:
                    System.out.println("进入退出:");
                    break Loop;  //目的是直接退出整个大循环
                    //System.exit(0);
                    //return;
                default:
                    System.out.println("您输入的信息有误解,请重新选择您的操作:");
                    break;
            }
        }
    }
    //根据学号id进行查询得到全部信息
    public static Student Select(ArrayList<Student> stu,int id){
        int length=0;
        for(int i=0;i<stu.size();i++){
            Student s=new Student();
            s=stu.get(i);
            if(s.getID()==id){
                idex=length;
                return s;
            }
            length++;
        }
        return null;
    }
}

其他类:

public class Student {
    private String name;
    private int ID;
    private String age;
    private double score;
    public Student() {
    }
    public Student(String name, int ID, String age, double score) {
        this.name = name;
        this.ID = ID;
        this.age = age;
        this.score = score;
    }

    public String getName() {
        return name;
    }

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

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public String getAge() {
        return age;
    }

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

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }
}

在这里插入图片描述

3.Map集合《键值》

package Com.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapTest {
    public static void main(String[] args) {
//  创建Map集合,左边是键 右边是值
        Map<String, Object> map = new HashMap<>();
//  给Map集合,进行赋值的操作
        map.put("demo1",1);
        map.put("demo2",2);
        map.put("demo3",3);
        map.put("demo4",4);
//  获取单个Map的信息
        System.out.println(map.get("demo1"));
        System.out.println("****************1");
// 移除某个映射: 可以通过仅用键,也可以利用键和值
        map.remove("demo4");
// 通过添加到数组链表对map进行遍历
        ArrayList<Map> list = new ArrayList<>();
        list.add(map);
        for (Map o : list) {
            System.out.println(o);
        }
        System.out.println("****************2");
// 返回此地图中包含的键的视图
        Set<String> strings = map.keySet();
//  通过Set集合进行遍历
        for (String string : strings) {
            System.out.println(string);
        }
        System.out.println("****************3");
//  把一个map集合复刻到另一个map1集合
        Map<String, Object> map1 = new HashMap<>();
        map1.putAll(map);
        System.out.println(map1.get("demo1"));
        System.out.println("****************4");
//  从地图上删除所有的映射
        map.clear();
    }
}

3.1 Map集合自己不能进行循环遍历

  1. 没有for方法
  2. 可以借助ArryList进行循环遍历
  3. 也可以借助Set集合进行循环遍历

3.2 Map集合的创建【】【借助Hash】【】

  1. 因为Map集合是一个接口不是一个类,所以我们需要使用Hash进行创建
  2. new HashMap<>();

3.3 replace进行替换

3.4 size 长度

3.5 remove移除

3.6 putAll复刻

3.7 keySet 返回所有的键

3.8 containsKey(Object key) 返回此映射

4.Set集合《非键值》

4.1 add(E e) 添加

4.2 addAll(Collection<? extends E> c) 复刻

4.3 contains(Object o) 是否包含

4.4 remove 移除

4.5 toArray() 所有元素的数组

4.6 retainAll() 仅保留一些元素

package Com.Test;

import java.util.HashSet;
import java.util.Set;

public class SetTest {
    public static void main(String[] args) {
        HashSet<Integer> set = new HashSet<>();
        set.add(1);
        set.add(2);
        set.add(3);
        HashSet<Integer> integers = new HashSet<>();
//        进行复刻
        integers.addAll(set);
        integers.add(4);
        for (Integer integer : integers) {
            System.out.println(integer);
        }
        System.out.println("*************1");

        for (Integer integer : set) {
            System.out.println(integer);
        }
        System.out.println("*************2");
        Object[] objects = set.toArray();
        for (Object object : objects) {
            System.out.println(object);
        }
        System.out.println("************3");
//        从集合中删除所有的元素
//        set.clear();
//        查看是否集合中含有该元素
        System.out.println(set.contains(1));
//        仅保留一些元素
        integers.retainAll(set);
        for (Integer integer : integers) {
            System.out.println(integer);
        }
    }
}

4.7Ser集合的创建 【】【借助Hash】【】

5.List集合《非键值》

5.1.LIst集合的创建【】【借助ArrayList】【】

package Com.Test;

import Com.Test.pojo.User;

import java.util.ArrayList;

public class ListTest {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();
        User user1 = new User("1",1,"1");
        User user2 = new User("2",2,"2");
        User user3 = new User("3",3,"3");
        User user4 = new User("4",4,"4");
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);
        for (User user : list) {
            System.out.println(user);
        }
    }
}

5.2.为什么遍历对象会输出字符串?

package Com.Test;

import Com.Test.pojo.User;

import java.util.ArrayList;

public class ListTest {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();
        User user1 = new User("1",1,"1");
        User user2 = new User("2",2,"2");
        User user3 = new User("3",3,"3");
        User user4 = new User("4",4,"4");
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);
        for (User user : list) {
            System.out.println(user);
        }
    }
}

实体类不注释掉toString这个方法.在这里插入图片描述
实体类注释掉toString这个方法.
在这里插入图片描述

5.3指定添加到哪个坐标

list.add(2,user1);

如果这个点存在数据,则原来这个坐标的数据后移一个。

在这里插入图片描述