AarrayList列表

本文详细介绍了ArrayList的实例化、添加数据(Add)、获取元素(get)、删除元素(remove)、扩容(Arrays.copyOf)以及修改元素(set)等方法,涉及数组的删除原理和ArrayList与Array的区别。同时,概述了ArrayList的其他重要功能如大小、遍历、排序等。
摘要由CSDN通过智能技术生成

列表

AarrayList

变长的数组(增删改查)

执行实例化 new ArrayList,定义了一个空数组

添加数据

********Add方法(增)

初始容量为10,把空数组扩容,扩容到10个元素,

Arrays.copyOf  

把其中的一个元素添加到数组中

面向对象编程: 一切皆对象,对象所有类的父类 Object

Class My extends Object{

}

Int型不属于,java把int写成类Integer,int简单类型,Integer的简单类型的包装类

获取元素的方法

*********get(索引值)---查

索引值从0开始计算索引

本来扩容了10个元素的数组,只有一部分有值,没有值就是null,官方源码中有一个rangCheck(),方法不允许访问数组中的空元素.

 返回异常

return new Exception("Exception in thread \"main\" java.lang.IndexOutOfBoundsException");

列表:

打印列表的变量名称时,输出列表中所有的元素。因为ArrayList---àAbastractArrayList--àAbstractColection(重写toString())

打印数组中元素是需要Arrays.toString();

**********remove del(删)

remove按照索引进行删除

[null,null,null,null,.....]

[1,2,3,4,5,6,7,8,null,null]

把索引为2的 3元素去掉, 后面元素不会自动往前走

数组长度不变,把4,5,6,7,8往前走一个索引。后面多余的元素还是null

官方没有循环,使用

System.arraycopy(elementData, index+1, elementData, index,

                 numMoved);

因为数组是定长,这里删除应该新的数组,这里只把元素做移动,官方做移动的原理还是数组的拷贝,移动前后的数组本来是两个数组,如果名称一致是一个数组,前面数组参数index+1,删除索引的后面元素, 后面元素相当于往前提一个位置,后面数组参数index,也就是前面数组元素的index+1覆盖后面数组元素index  

System.arraycopy(elementData, index+1, elementData, index,

                 numMoved);

总结:

数组扩容: Arrays.copyOf

数组的删除:System.arraycopy

*******修改

数组本身具体数据的修改

修改使用set

列表中其它方法

列表长度使用

Size( )底层记录列表的长度就是size

isEmpty()判断当前列表是否为空

indexOf判断当前列表中是否有某个元素

lastIndexOf底层是倒序遍历

clone()克隆:底层就是执行Arrays.copyOf又产生一个数组

在Arrays.copyOf中的底层还是调用System.copyOf

 toArray() 把当前的列表转成数组,底层还是用的Arrays.copy

clear()把列表清空

for循环,把所有的列表元素置null,size置0

removeAll 移除所有的元素

listIterator 把所有的迭代器显示

iterator() 获取列表的迭代器

subList,从某一个索引到某一个索引取子列表

forEach进行遍历

replace替换方法,替换所有的元素

replaceAll

sort排序调用的Arrays.sort 排序方法.

仿造官方ArrayList写一个自己的ArrayList.

在AbstractArrayList

Get方法没实现:

 abstract public E get(int index);

试验一下

public E set(int index, E element) {
    throw new UnsupportedOperationException();
}

indexOf在AbstractArrayList中实现

直接在Abstract实现.记住(官方在Abstract中的做的迭代器,官方在ArrayList作的是循环)

Abstract里面调用方法

public void clear() {
    removeRange(0, size());
}

 在abstract里面重写equals,双重for循环比较

hashCode都重写的,列表的算法与String算法相同

在clear方法中调用了

protected void removeRange(int fromIndex, int toIndex) {
    ListIterator<E> it = listIterator(fromIndex);
    for (int i=0, n=toIndex-fromIndex; i<n; i++) {
        it.next();
        it.remove();
    }
}

上层是abstractCollection

重写contains

 toArray

remove方法在abstractCollection也实现了

containsAll包含所有元素

removeAll把所有元素清除

Collection接口方法

int size();

boolean isEmpty();

boolean contains(Object o);

Object[] toArray();

boolean add(E e);

boolean remove(Object o);

boolean removeAll(Collection<?> c);

void clear();

boolean equals(Object o);

int hashCode();

   

List接口

int size();

boolean isEmpty();

boolean contains(Object o);

Iterator<E> iterator();

Object[] toArray();

boolean add(E e);

boolean remove(Object o);

boolean containsAll(Collection<?> c);

boolean removeAll(Collection<?> c);

default void sort(Comparator<? super E> c) {
    Object[] a = this.toArray();
    Arrays.sort(a, (Comparator) c);
    ListIterator<E> i = this.listIterator();
    for (Object e : a) {
        i.next();
        i.set((E) e);
    }
}

boolean equals(Object o);

int hashCode();

E get(int index);

E set(int index, E element);

void add(int index, E element);

E remove(int index);

int indexOf(Object o);

int lastIndexOf(Object o);

  void clear();
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值