【Java】集合的基本使用

一、为什么要有集合?

如果我现在想同时存储多个元素,我们该怎么办?

数组就可以干这件事情,但是数组有弊端。

数组的长度是固定的,一旦创建完毕后,长度就不能发生变化了。那能不能有一个容器它的长度是可变的呢?当然有,这个容器就是我们今天要学习的集合。

集合是一个容器,它也是可以来存储多个数据,只不过它的长度是可以发生变化的。

当我们在创建一个集合对象的时候,因为一开始还没有添加元素,因此集合的长度一开始是为0。然后添加了第一个元素,集合的长度会自动扩容变成1,不需要我们管,集合底层自动实现的,我们只需要把元素添加进去就可以了。当添加第二个元素进去的时候,集合的长度会再次扩容变成2。添加第三个元素,它的长度会再次扩容变成3…在这个过程中,最为重要的四个字:自动扩容


二、集合存储数据类型的特点

除此之外,集合跟数组在存储元素之外还有第二个区别。

数组是可以存储基本数据类型的,例如 int[] arr1 = new int[3];

数组也是可以存储引用数据类型的,例如 User[] userArr = new User[2];

但是集合只可以存引用数据类型。

image-20240409193940915

但如果我们就是想存 1~9 这样的整数,或者是小数,或者是字符怎么办,就需要将它们变成其对应的包装类。


三、集合和数组的对比

1)长度的区别

数组的长度是固定的,集合的长度是可变的,当我们往集合中添加了一个元素后,集合的长度自动加1,删除一个元素,集合的长度自动减一。如果我们添加了两个元素,集合的长度自动加二,删除两个元素,集合的长度自动减二。非常的灵活,用八个字去形容:自动伸缩,可长可短。

2)存储类型的区别

数组是可以存储基本数据类型的,例如整数、小数、字符、布尔…

数组还可以存引用数据类型。

但是集合只能存引用数据类型,如果需要存基本数据类型,需要把它们变成其对应的包装类才可以。

image-20240409194447665


四、集合

在Java中其实规定了很多很多种集合,每种集合都有其各自的特点。

image-20240409194853313

现在我们先来学习以后用的最多的 ArrayList 集合。


五、ArrayList集合

想要学习这个类,肯定要来看它的构造和成员方法,因此我们先打开API帮助文档先查阅一下。

ArrayList 是定义在 java.util 包下的,因此我们一会在使用的时候需要导包。

image-20240409195041604

在类名的右侧有个 <E>,这个 <E> 就是泛型,我们在创建对象的时候,ArrayList 后面也要写这样的 <><> 里面写存储的数据类型就可以了。

image-20240409195244793

再往下看的就是构造方法,构造是一个空参的,我们就用它就行。

image-20240409195345908

创建完对象后,我们就可以成员方法对集合里的数据进行添加、删除、查找等等。

package com.itheima.listdemo;

import java.util.ArrayList;

public class ArrayListDemo1 {
    public static void main(String[] args) {
        //1.创建集合的对象,集合的对象创建完毕后,就好比存储数据的容器就有了
        // 但是这么写会有个小问题,集合也是个容器,也可以用来存储数据,但这里容器中的数据类型没发限定
        ArrayList list = new ArrayList();
        //此时我们就需要引入一个概念 —— 泛型,泛型的作用:限定集合中存储数据的类型
        // 如果在里面写了int,就会报错,因为集合里面不能直接存基本数据类型
        ArrayList<int> list = new ArrayList();
        // 但我们可以写字符串,因为在字符串是引用数据类型,前面写了,后面也需要写,即在类名的后面都需要写上
        // 这句话的意思就是:我们创建了一个集合用来存储数据,集合以后只能存储String这样的字符串
        ArrayList<String> list = new ArrayList<String>();
        // 但是这种写法是JDK7以前的写法,到了JDK7以后,它觉得,我前面写过了,那后面还要再写一遍,太麻烦了,因此后面的String可以省略不写,但是<>一定要留着
        ArrayList<String> list = new ArrayList<String>();

        //解释[]:
        //此时我们创建的是ArrayList的对象,而ArrayList是java已经写好的一个类
        //这个类在底层做了一些处理
        //1.打印对象不是地址值,而是集合中存储数据内容
        //2.在展示的时候会拿[]把所有的数据进行包裹
        //如果[]中间什么也没有,就表示集合现在是空的,它的长度为0,里面是没有内容的
        ArrayList<String> list = new ArrayList<>();
        System.out.println(list);
    }
}

六、ArrayList 成员方法

虽然方法很多,但是我们可以总结为四个字:增、删、改、查。

查的时候我们可以查询单个的,也可以查询集合中所有的元素。

所以说我们以后在学习这种容器类的知识点的时候,抓住 增、删、改、查 这四个字就可以了。

方法名说明
public boolean add(要添加的元素)将指定的元素追加到此集合的末尾
public boolean remove(要删除的元素)删除指定元素,返回值表示是否删除成功
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
public E get(int index)返回指定索引处的元素
public int size()返回集合中的元素的个数

1)boolean add(E e)

list.add("aaa"); 代码中,调用 add 方法时候,括号里面的 e 就表示 element,即添加元素的意思。

这里的 e 的类型是 String,就表示现在可以往里面添加字符串。

方法的返回值是布尔类型的,表示当前的元素是否添加成功。

image-20240409201733732

ArrayList 集合有一个特点,就是不管添加什么,它都是可以添加成功的,因此这个方法永远返回一个 true

我们可以来看看 add 的源码,选中 add,然后ctrl + b

image-20240409202500042

虽然中间这两行我们暂时看不懂,没关系,我们直接看最后一句话。在添加完毕后,它直接 return 一个 true

image-20240409202408025

由于因为不管添加什么,都会返回一个true,因此我们在添加的时候一般是不会去管它的返回值的,也就是说我们直接调用方法,直接使用方法本身的添加功能就可以了:list.add("aaa");

//1.创建一个集合
ArrayList<String> list = new ArrayList<>();

//2.添加元素
list.add("aaa");
list.add("aaa");
list.add("bbb");
list.add("ccc");

2)boolean remove(E e)

元素删除成功,返回一个 true;如果删除失败,返回 false

boolean result1 = list.remove("aaa");
System.out.println(result1); // true

boolean result2 = list.remove("ddd");
System.out.println(result2); // 当你要删除的元素不存在的时候,就会返回false

3)E remove(int index)

根据索引删除,看到这个方法就知道,ArrayList集合 还有索引,它的索引规则跟数组、字符串的规则都是一样的,都是从0开始,逐一增长,中间不间断的。

如果是通过索引删除的,它就会把被删除的元素返回。

String str = list.remove(2);
System.out.println(str); // "aaa"

3)E set(int index,E e)

把被覆盖的元素,也就是原来的旧值返回。

String result = list.set(1, "ddd"); // 将 1 索引上的元素变成 "ddd"
System.out.println(result); // 接收到的是 "aaa",即被覆盖的字符串

4)E get(int index)

根据制定的索引来查询到对应的元素。

String s = list.get(0);
System.out.println(s); // "aaa"

5)int size()

获取集合的长度,要注意的是,集合的长度不叫做 length() 了,而是 size(),而且它也是个方法,在调用的时候需要加一个 ()

方法就会将集合的长度做一个返回。

get() 方法与 size() 方法结合起来就可以做一个变量,遍历同样不需要我们手写,使用IDEA快捷方式自动生成就可以了:list.fori

image-20240409204619829

//遍历
for (int i = 0; i < list.size(); i++) {
    //i 索引
    //list.get(i) 元素
    String str = list.get(i);
    System.out.println(str);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值