Day11 ArrayList集合

文章介绍了集合和数组的区别,强调集合的长度可变性及只能存储引用数据类型。重点讨论了ArrayList的泛型使用,构造方法,以及add(),remove(),set(),get(),size()等成员方法的细节。此外,文章还涉及了在集合中添加元素,删除元素,遍历集合,以及存储对象时需要注意的问题,包括对象地址和数据覆盖。
摘要由CSDN通过智能技术生成

一、为什么有集合

1.集合和数组区别

(1)长度

数组一旦创建长度就不能修改了
集合时可以发生变化的,他可以自动扩容;添加数据的时候不需要考虑索引,默认将数据添加到末尾。

(2)存储类型

数组:可以存基本数据类型和引用数据类型
集合:引用数据类型,不能直接存基本数据类型,需要变成对应的包装类

二、集合—ArrayList

1.泛型

泛型:限定集合中存储数据类型
Class ArrayList,这里的 < E>就是泛型

2.构造

ArrayList<String> list = new ArrayList<String>();//后面的String可以省略不写
System.out.println(list);//输出:[]

分析:
这个类再底层做了一些处理。打印对象不是地址值,而是及合作存储的数据内容;在展示集合中的内容时,会用[ ]把所有的数据进行包裹,中间用逗号隔开

3.成员方法

方法名说明
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)关于add()方法

不管添加什么,都会返回true
底层代码如下:

public boolean add(E e) {
        modCount++;
        add(e, elementData, size);
        return true;
    }

(2)remove()方法

两种:删除字符串,根据索引删除
一个字符串占用一个索引
被删除的元素会做一个返回。

三、练习

1.关于输出格式

ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        System.out.println(list);//(1)[aaa, bbb, ccc]
        System.out.print("[");
        for (int i = 0; i < list.size() - 1; i++) {
            System.out.print(list.get(i) + ",");
        }
        System.out.println(list.get(list.size() - 1) + "]");
        //(2)[aaa,bbb,ccc]

分析:
输出(1):在bbb和ccc之前会有空格,这是集合直接输出的格式

2.在集合里添加数字

基本数据类型对应的包装类

基本数据类型包装类
byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean

3.集合循环遍历

(1)集合长度

ArrayList<Student> list = new ArrayList<>();
for (int i = 0; i < list.size() ; i++) {
	System.out.println("111");
	list.add("222");
}
System.out.println(list.size());//0

输出结果为0
分析:ArrayList的长度时自动扩容的,即list.size()刚开始值为0,for循环里的内容并没有执行

(2)关于存储

 Student s = new Student();<1>
for (int i = 0; i < 3 ; i++) {
            Student s = new Student();//<2>
            System.out.println("请输入学生的姓名:");
            String name = sc.next();
            System.out.println("请输入学生年龄:");
            int age = sc.nextInt();
            //把name,age赋值给学生对象
            s.setName(name);
            s.setAge(age);
            list.add(s);
        }

分析:
如果把 Student s = new Student();放在循环外,会出现的结果
存储的三条数据均为最后一次输入的数据
原因:
new出来的学生对象,假设地址为0x0011,赋值之后,把0x0011这个地址值放入集合中;当 Student s = new Student();放在循环外,没有new一个新的Student对象,再输入数据,则会覆盖0x0011里的数据;所以最后集合里面只有一个地址值,该地址所存储的内容是最后一次输入的内容。

4.手机信息查询

返回多个数据

可以把这些数据放在一个容器中,然后返回这个容器。
这个容器可以是集合,可以是数组

5.关于String串内字符打乱

必须先把它转化为字符型数组,打乱后再转为字符,字符串内不能进行打乱。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Heliotrope&G

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值