从零开始学Java-集合

155 阅读9分钟

什么是集合

我们来举个例子:

如果我们想同时存储多个元素,我们该怎么办呢?那简单呀,我用数组不就可以了吗?

image.png

那我再来举个例子:

image.png

如果你喜欢了三个小姐姐,突然间有一天又喜欢上了一位,你还能装的下吗?数组是不是有弊端呀!数组是不是创建完就固定了呢,大小固定了呀。

image.png

当然那必须是有的,那就是集合!集合也是和数组一样是一种容器,而且大小是可以自动扩容的哟。

  • 数组与集合长度区别:

    • 数组
      • 数组长度固定,不可变
    • 集合
      • 集合长度自动扩容,添加一个元素自动+1,删除一个元素自动-1.
  • 数组与集合存储区别:

    • 数组
      • 可以存基本数据类型
      • 可以存引用数据类型
    • 集合
      • 可以存引用数据类型
      • 不可以直接存基本数据类型,需要变成包装类才可以存储

那下面我们来学习一下集合吧!

ArrayList

创建集合对象:ArrayList<String> list = new ArrayList<>();

我们来打印看一下:

image.png

什么都没有?这是为什么呢?

其实我们创建的是ArrayList的对象,而ArrayList是Java已经写好的一个类 在展示的时候会拿[]把所有的数据进行包裹

打印对象不是地址值,而是集合存储的数据内容

好啦,我们知道怎么创建了,那怎么给他添加数据呢?下面我们来看一下他的成员方法都有哪些吧!

ArrayList成员方法

方法名说明
boolean add(E e)添加元素,返回值表示是否添加成功
boolean remove(E e)删除指定元素,返回值表示是否删除成功
E remove(int index)删除指定索引的元素,返回被删除元素
E set(int index,E e修改指定索引下的元素,返回原来元素
E get(int index)获取指定索引的元素
int size()集合的长度,集合中元素的个数

统称四个字:增、删、改、查。

下面我们来实操一下吧:

  • 添加元素:
list.add("张三");
  • 删除元素:
list.remove("王五");
  • 根据索引删除元素,并返回删除元素:
String remove = list.remove(0);
System.out.println(remove);
  • 根据索引修改元素:
list.set(0,"张四");
  • 根据索引查找元素:
String s = list.get(0);
System.out.println(s);
  • 遍历集合元素:
for (int i = 0; i < list.size(); i++) {
    // list.get(i) 集合的每一个元素
    String str = list.get(i);
    System.out.println(str);
}

好啦,以上就是集合的基本操作啦。那有的人就会问了,我如果要添加基本数据类型怎么办呢?是不是要变成对应的包装类才可以呀!

基本数据类型包装类

那下面我们就来了解一下基本数据类型对应的包装类吧:

类型包装类
byteByte
shortShort
longLong
floatFloat
doubleDouble
booleanBoolean

这些基本数据类型是不是把首字母大写就是对应的包装类了呀,我们下面来说一下特殊的两个:

类型包装类
charCharacter
intInteger

我们需要记住这两个是特殊的,其他的知道大写就可以啦!我们下面来实操一下吧:

  • 整数型

第一步:创建整数集合

// 1.创建整数集合
ArrayList<Integer> list1 = new ArrayList<>();

第二步:添加集合元素

// 2.添加元素
list1.add(10);
list1.add(20);
list1.add(30);

第三步:遍历集合元素

// 3.遍历集合
System.out.print("[");
for (int i = 0; i < list1.size(); i++) {
    if(i == list1.size() -1){
        System.out.print(list1.get(i));
    }else{
        System.out.print(list1.get(i) + ",");
    }
}
System.out.println("]");
  • 字符型

第一步:创建字符集合

// 1.创建字符集合
ArrayList<Character> list2 = new ArrayList<>();

第二步:添加集合元素

// 2.添加元素
list2.add('a');
list2.add('b');
list2.add('c');

第三步:遍历集合元素

// 3.遍历集合
System.out.print("[");
for (int i = 0; i < list2.size(); i++) {
    if(i == list2.size() -1){
        System.out.print(list2.get(i));
    }else{
        System.out.print(list2.get(i) + ",");
    }
}
System.out.println("]");

怎么样,是不是都一样的呀。好啦,以上就是基本类型的添加元素并遍历元素啦。我们下面来看几道案例吧:

集合案例练习

添加学生对象并遍历

需求:定义一个集合,添加一些学生对象,并进行遍历。学生类的属性为:姓名,年龄。

要求:对象的数据由键盘输

第一步:创建学生属性

private String name;
private int sge;

第二步:创建学生的集合对象

// 1.创建学生集合
ArrayList<Student> list = new ArrayList<>();

第三步:键盘录入学生信息

Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
    Student stu = new Student();
    // 2.1由键盘输入信息
    System.out.println("请输入第" + (i + 1) +"学生姓名:");
    String name = sc.next();
    System.out.println("请输入第" + (i + 1) +"学生年龄:");
    int age = sc.nextInt();
}

第四步:把添加到的值赋值给学生对象

// 2.2把name和age赋值给学生对象
stu.setName(name);
stu.setSge(age);

第五步:把学生对象添加进集合当中。

// 2.3 把学生对象添加进集合当中
list.add(stu);

第六步:遍历集合元素

for (int i = 0; i < list.size(); i++) {
    Student stu = list.get(i);
    // System.out.println(student);   // 输出地址值 demo11.Student@16b98e56
    // 如果我们自定义的类需要打印值需要用到get方法
    System.out.println("姓名:" + stu.getName() + "," + "年龄:" +  stu.getSge());
}

我们来运行看一下吧:

image.png

完整代码:

public static void main(String[] args) {
        // 1.创建学生集合
        ArrayList<Student> list = new ArrayList<>();
        // 2.键盘录入学生的信息并添加到集合当中
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            Student stu = new Student();
            // 2.1由键盘输入信息
            System.out.println("请输入第" + (i + 1) +"学生姓名:");
            String name = sc.next();
            System.out.println("请输入第" + (i + 1) +"学生年龄:");
            int age = sc.nextInt();

            // 2.2把name和age赋值给学生对象
            stu.setName(name);
            stu.setSge(age);

            // 2.3 把学生对象添加进集合当中
            list.add(stu);
        }

        // 3. 遍历集合元素
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            // System.out.println(student);   // 输出地址值 demo11.Student@16b98e56
            // 如果我们自定义的类需要打印值需要用到get方法
            System.out.println("姓名:" + stu.getName() + "," + "年龄:" +  stu.getSge());
        }
    }

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

需求:1在main方法中定义一个集合,存入三个对象,用户属性为id,username,password。

2.定义一个方法,根据id查找对应的用户信息。如果存在就返回true,不存在就返回false。并返回对应的索引

第一步:创建用户对象的属性

private String id;
private String name;
private  String password;

第二步:创建用户集合和添加到集合里面

// 1.定义用户集合
ArrayList<User> list = new ArrayList<>();
// 2.创建用户三个对象
User u1 = new User("zhangsan01","张三","123");
User u2 = new User("lisi02","李四","123");
User u3 = new User("wangwu03","王五","123");

// 3.把对象添加进集合中。
list.add(u1);
list.add(u2);
list.add(u3);

第三步:定义方法用来判断id是否存在

public static boolean userId(ArrayList<User>list,String id){
    for (int i = 0; i < list.size(); i++) {
        User user = list.get(i);
        String uid = user.getId();
        if(uid.equals(id)){
            // 如果找到了,直接返回true
            return true;
        }
    }
    return false;
}

第四步:定义方法用来查找对应的索引

public static int getIndex(ArrayList<User> list,String id){
    for (int i = 0; i < list.size(); i++) {
        User user = list.get(i);
        String uid = user.getId();
        if(uid.equals(id)){
            // 如果找到了,直接返回true
            return i;
        }
    }
    return -1;
}

第五步:调用方法查看id是否存在以及对应的索引

// 4.调用方法查看id是否存在
boolean flag = userId(list, "lisi02");
int index = getIndex(list, "lisi02");
System.out.println("是否存在:" + flag + "对应的索引是" + index);

我们来运行看看一下吧:

image.png

完整代码:

public static void main(String[] args) {
        // 1.定义用户集合
        ArrayList<User> list = new ArrayList<>();
        // 2.创建用户三个对象
        User u1 = new User("zhangsan01","张三","123");
        User u2 = new User("lisi02","李四","123");
        User u3 = new User("wangwu03","王五","123");

        // 3.把对象添加进集合中。
        list.add(u1);
        list.add(u2);
        list.add(u3);

        // 4.调用方法查看id是否存在
        boolean flag = userId(list, "lisi02");
        int index = getIndex(list, "lisi02");
        System.out.println("是否存在:" + flag + "对应的索引是" + index);
    }

    // 4.定义方法用来判断查找id是否存在
    public static boolean userId(ArrayList<User>list,String id){
//        for (int i = 0; i < list.size(); i++) {
//            User user = list.get(i);
//            String uid = user.getId();
//            if(uid.equals(id)){
//                // 如果找到了,直接返回true
//                return true;
//            }
//        }
//        return false;
        return getIndex(list,id) >= 0;
    }

    // 5.定义方法用来查找对应的索引
    public static int getIndex(ArrayList<User> list,String id){
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            String uid = user.getId();
            if(uid.equals(id)){
                // 如果找到了,直接返回true
                return i;
            }
        }
        return -1;
    }

添加手机对象并返回要求的数据

需求:定义javabean类:phone。phone属性:品牌,价格。 main方法中定义一个集合,存入3个手机对象。分别为小米1000。苹果8000.锤子2999.

定义一个方法,将价格低于3000的手机信息返回

第一步:定义手机对象属性

private String brand;
private double price;

第二步:创建手机集合并创建对象添加到集合里面

// 1.定义手机集合
 ArrayList<Phone> list = new ArrayList<>();
// 2.创建手机对象
 Phone p1 = new Phone("小米",1000);
 Phone p2 = new Phone("苹果",8000);
 Phone p3 = new Phone("锤子",2999);
// 3.把对象添加进集合里面
 list.add(p1);
 list.add(p2);
 list.add(p3);

第三步:定义方法用来遍历集合获取低于3000的手机

public static ArrayList<Phone> phoneInfo(ArrayList<Phone> list){
    // 定义一个集合用来存储价格低于3000的手机对象
    ArrayList<Phone> result = new ArrayList<>();
    for (int i = 0; i < list.size(); i++) {
        Phone p = list.get(i);
        double price = p.getPrice();
        // 判断当前手机价格低于3000的就把手机对象添加到容器中
        if(price < 3000){
            result.add(p);
        }
    }
    return result;
}

第五步:调用方法并遍历返回的集合元素

// 5.调用方法
ArrayList<Phone> phonelist = phoneInfo(list);

// 6.遍历返回的集合元素
for (int i = 0; i < phonelist.size(); i++) {
    Phone phone = phonelist.get(i);
    System.out.println("手机信息:" + phone.getBrand() + "  手机价格:" + phone.getPrice());
}

我们来运行看一下吧:

image.png

完整代码:

public static void main(String[] args) {
    // 1.定义手机集合
    ArrayList<Phone> list = new ArrayList<>();
   // 2.创建手机对象
    Phone p1 = new Phone("小米",1000);
    Phone p2 = new Phone("苹果",8000);
    Phone p3 = new Phone("锤子",2999);
   // 3.把对象添加进集合里面
    list.add(p1);
    list.add(p2);
    list.add(p3);

    // 5.调用方法
    ArrayList<Phone> phonelist = phoneInfo(list);
    
    // 6.遍历返回的集合元素
    for (int i = 0; i < phonelist.size(); i++) {
        Phone phone = phonelist.get(i);
        System.out.println("手机信息:" + phone.getBrand() + "  手机价格:" + phone.getPrice());
    }
}

// 4.定义方法用来查找手机对象
// 如果我们要返回多个数据,可以把这些数据先放到一个容器中,再把容器返回。
public static ArrayList<Phone> phoneInfo(ArrayList<Phone> list){
    // 定义一个集合用来存储价格低于3000的手机对象
    ArrayList<Phone> result = new ArrayList<>();
    for (int i = 0; i < list.size(); i++) {
        Phone p = list.get(i);
        double price = p.getPrice();
        // 判断当前手机价格低于3000的就把手机对象添加到容器中
        if(price < 3000){
            result.add(p);
        }
    }
    return result;
}

好啦,以上就是一些常用的集合增删改查以及练习案例,有什么不懂的可以在评论区评论,我们下期不见不散哟!

==最后非常感谢您的阅读,也希望能得到您的反馈  ==