专业编程基础技术教程

网站首页 > 基础教程 正文

小白学JAVA之——List接口的实现类——ArrayList

ccvgpt 2024-10-12 14:04:45 基础教程 10 ℃


集合框架

小白学JAVA之——List接口的实现类——ArrayList

接下来将要学习的内容为:

1.Collection接口(线性存储)(容器的最高父接口);

? (1)List接口(有序(指有下标/索引)、数据可重复);

(2)Set接口(无序,数据不可重复);

(3)queue队列;

2.Map接口(键(key)-值(value)对存储)(映射关系)

首先了解一个设计模式:适配者模式(通俗的理解是功能基本不变,只是改了方法名)(最主要的功能就是将一个接口转换为另一个接口)

List接口的实现类:

1.ArrayList(底层为数组结构)在数组中赋值方式为a[0] = 1; ArrayList底层还是数组,数组赋值是通过脚标赋值的,我现在还要用他赋值的功能,但是对外提供接口变了,赋值变为了add();? 优点:查、改效率高

? 2.LinkedList(底层为双向链表)

? 优点:增、删效率高

? 3.Vector(和ArraysList基本上一样(数组结构),只不过他是线程安全的,访问效率低)

ArrayList

ArrayList 无参的构造方法,创建了一个长度为0的数组

ArrayList list = new ArrayList();//默认容量为0也有有参的构造方法,指定了初始大小

本质上就是创建了一个参数大小的数组

ArraysList list = new ArrayList(10);//容量设置为10

//还可以传一个集合,将传进的集合中的元素copy给新集合来看看源码:

public ArrayList(int initialCapacity) { //创建时可传参

if (initialCapacity > 0) { //如果传的参数容量大于0

this.elementData = new Object[initialCapacity]; //创建一个大小为initialCapacity的数组

} else if (initialCapacity == 0) {

this.elementData = EMPTY_ELEMENTDATA; //如果传入的参数为0,那就是默认的那个空数组

} else {

throw new IllegalArgumentException("Illegal Capacity: "+ //如果参数小于0则抛出一个异常

initialCapacity);

}

}1.添加元素(add())

添加过程:

先将底层数组扩容

将元素赋值到数组对应位置

返回true

list.add(10);//这里的这个10是基础数据类型的对象类型:Integer类型

list.add("abc")//添加元素的位置跟add的次序有关,第一个add在数组的第一个位置源码

public boolean add(E e) {

ensureCapacityInternal(size + 1); // Increments modCount!!

elementData[size++] = e; //核心代码:把这个元素赋给了数组相应位置。

return true; //添加成功,返回一个true。如果添加不成功在上一行代码中就会报错,不会执行到这一行

}add还可以给指定位置添加元素

//为指定位置添加元素 第一个参数:指定位置,第二个参数:元素值

add(index,data);//给index位置添加data数据,其他数据会往后挤注意:

只能向前面有数据的位置插入,不能中间空了好多位置向后插入,比如容量大小为10,目前只有两个元素,则只能往0,1,2的位置插入,不能向3,4,5…等位置隔着插入

ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似 不能写,但是存储基本数据类型对应的包装类型是可以的。所以,想要存储基本类型数据, <> 中的数据类型,必须转换后才能编写。

2.获取元素(get())

list.get(0);源码

//get

public E get(int index) {

rangeCheck(index);

return elementData(index);//如果上句不抛异常,则执行到这句,返回相应的元素

}

//rangeCheck()

private void rangeCheck(int index) {

if (inde

Tags:

猜你喜欢

最近发表
标签列表