ArrayList与顺序表

线性表:n个具有相同特征的数据元素的有限序列。

             顺序表,链表,栈,队列......

存储结构

顺序存储:顺序

链式存储:链表

顺序表:物理地址连续的存储单元依次存储数据元素的线性表(背后是一个数组,在数组上完成数据的增删查改)

顺序表的增删查改各种操作,需要注意点:

1.是否为空

2.顺序表是否满了,是否要扩容

3.查找/删除一个下标的时候,确定下标范围是否正确

4.判断各种异常时,自定义异常

5.各种操作完成后,记得修改usedSize的值

总代码:

 自定义的两个异常

 测试及其运行结果:


ArrayList

1.ArraryList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表。

2.ArrayList是以泛型的方式实现的,使用时必须要先实例化。

3.ArrayList实现了Cloneable接口,表明它是可以clone的;实现了Serializable,表示它支持序列化;RandomAccess表示支持随机访问。

三种构造方法

 

 往ArrayList里面传的包装类(?)必须是E或者E的子类,E是上界

 

报错:因为String不是Integer或者Integer的子类 

观察idea中的构造原码:

 

 

默认容量为10

 

长度为0,这个构造方法,没有分配内存

 类似于顺序表背后的数组,size是有效的数据个数

arraryList1.add(1);将数据存储于ArrayList中,原码

当我们调用不带参数的构造方法时,只有第一个add() 的时候,我们才会分配大小为10的内存,当开始放第十一个时,idea中的原码采用的是1.5倍的扩容。

当我们调用带参数的构造方法时,直接为自己设置的内存大小。

ArrayList的常规方法

remove()函数的两种删除:下标,值

 

 截取:左闭右开,并且要通过List<>接收

注意:再进行更新操作,发现list和arraylist5中都会发生改变

 

ArrayList的遍历

三种遍历方式:fori循环+下标,foreach,使用迭代器。

1.fori循环

 2.foreach

3.使用迭代器 

Iterator

arrayList1.iterator()

 观察原码,需要Iterator接收

while(xxx.hasNext())判断xxx是否有下一个数据,如果有,打印下一个数据xxx.next()

使用Iterator的子类ListIterator迭代

 eg:存放学生对象在arrayList中,学生信息有年龄,姓名,分数,并且按照分数排序打印

1.指定存放自定义类型
2.Collections.sort()对集合进行排序

 eg:给两个字符串str1:"welcome to bit"  str2:"come"

删除第一个字符串中,出现的第二个字符串的字符

结果:wl t bit

要求:使用集合ArrayList来完成

 注意:String的contains的参数必须是字符串,ch是字符,所以可以加上一个不带空格的双引号将其变为字符串。

contains(ch+"")

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Roylelele

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

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

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

打赏作者

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

抵扣说明:

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

余额充值