JAVA-容器-ArrayList

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。 

ArrayList 继承了 AbstractList ,并实现了 List 接口,允许 null 的存在。


import java.util.ArrayList;
import java.util.List;

//E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。
//objectName: 对象名
List<E> objectName =new ArrayList<>();

排序

    public static void main(String[] args) {
        ArrayList<Integer> myNumbers = new ArrayList<Integer>();
        myNumbers.add(2);
        myNumbers.add(3);
        myNumbers.add(1);
        Collections.sort(myNumbers);  // 数字排序
        for (int i : myNumbers) {
            System.out.println(i);
        }
    }

特性

  •    允许插入的元素重复
  •    插入的元素是有序的
  •    动态扩容
  •    非线程安全,异步
  •    基于动态数组的数据结构
  •    擅长随机访问(get set)

注意:

  • 如果我们要存储其他类型,而 <E> 只能为引用数据类型,这时我们就需要使用到基本类型的包装类。
  • ArrayList 底层是基于数组来实现容量大小动态变化的。
  • ArrayList 默认初始容量为10,无参构造函数 构造一个容量大小为 10 的空的 list 集合,但构造函数只是给 ArrayList 赋值了一个空的数组,其实是在第一次添加元素时容量扩大至 10 的。
  • ArrayList 的索引值从 0 开始。

Serializable接口:

        ArrayList实现了java.io.Serializable接口,该接口主要是在序列化的时候起作用。

RandomAccess 接口:

        RandomAccess 是 List 实现所使用的标记接口,用来表明其支持快速(通常是固定时间)随机访问。此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能。

Cloneable接口:

        它允许在堆中克隆出一块和原对象一样的对象,并将这个对象的地址赋予新的引用,这样显然我对新引用的操作,不会影响到原对象。

        此类实现了Cloneable接口,以指示Objectclone()方法可以合法地对该类实例进行按字段复制。Objectclone()方法,提供的是一种浅克隆的机制,如果想要实现对对象的深克隆,可以引入第三方jar包等方式。


浅克隆和深克隆

浅克隆(shallow clone)和深克隆(deep clone)反映的是:当对象中还有对象的时候,那么:

  1. 浅克隆,即很表层的克隆,如果我们要克隆对象,只克隆它自身以及它所包含的所有对象的引用地址。
  2. 深克隆,克隆除自身对象以外的所有对象,包括自身所包含的所有对象实例。


JDK
Modifier and TypeMethod and Description
booleanadd(E e)

将指定的元素追加到此列表的末尾。

voidadd(int index, E element)

在此列表中的指定位置插入指定的元素。

booleanaddAll(Collection<? extends E> c)

按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾。

booleanaddAll(int index, Collection<? extends E> c)

将指定集合中的所有元素插入到此列表中,从指定的位置开始。

voidclear()

从列表中删除所有元素。

Objectclone()

返回此 ArrayList实例的浅拷贝。

booleancontains(Object o)

如果此列表包含指定的元素,则返回 true 。

voidensureCapacity(int minCapacity)

如果需要,增加此 ArrayList实例的容量,以确保它可以至少保存最小容量参数指定的元素数。

voidforEach(Consumer<? super E> action)

Iterable的每个元素执行给定的操作,直到所有元素都被处理或动作引发异常。

Eget(int index)

返回此列表中指定位置的元素。

intindexOf(Object o)

返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。

booleanisEmpty()

如果此列表不包含元素,则返回 true 。

Iterator<E>iterator()

以正确的顺序返回该列表中的元素的迭代器。

intlastIndexOf(Object o)

返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。

ListIterator<E>listIterator()

返回列表中的列表迭代器(按适当的顺序)。

ListIterator<E>listIterator(int index)

从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器。

Eremove(int index)

删除该列表中指定位置的元素。

booleanremove(Object o)

从列表中删除指定元素的第一个出现(如果存在)。

booleanremoveAll(Collection<?> c)

从此列表中删除指定集合中包含的所有元素。

booleanremoveIf(Predicate<? super E> filter)

删除满足给定谓词的此集合的所有元素。

protected voidremoveRange(int fromIndex, int toIndex)

从这个列表中删除所有索引在 fromIndex (含)和 toIndex之间的元素。

voidreplaceAll(UnaryOperator<E> operator)

将该列表的每个元素替换为将该运算符应用于该元素的结果。

booleanretainAll(Collection<?> c)

仅保留此列表中包含在指定集合中的元素。

Eset(int index, E element)

用指定的元素替换此列表中指定位置的元素。

intsize()

返回此列表中的元素数。

voidsort(Comparator<? super E> c)

使用提供的 Comparator对此列表进行排序以比较元素。

Spliterator<E>spliterator()

在此列表中的元素上创建late-binding故障快速 Spliterator

List<E>subList(int fromIndex, int toIndex)

返回此列表中指定的 fromIndex (包括)和 toIndex之间的独占视图。

Object[]toArray()

以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。

<T> T[]toArray(T[] a)

以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素); 返回的数组的运行时类型是指定数组的运行时类型。

voidtrimToSize()

修改这个 ArrayList实例的容量是列表的当前大小。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值