AarrayList列表

列表

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循环,把所有的列表元素置nullsize0
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();
}

 

indexOfAbstractArrayList中实现
直接在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();
 
 
 
 
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值