集合框架2- ArrayList

其实 Java 集合框架也叫做容器,主要由两大接口派生而来,一个是 collection,主要存放对象的集合。另外一个是Map, 存储着键值对(两个对象)的映射表。

集合框架2- ArrayList

下面就来说说 List接口,List存储的元素是有序、可重复的。其下有三个子接口,ArrayList、LinkedList 和 vector。

一、 ArrayList概述

ArrayList 底层数据结构是基于 Object 数组来实现的,我们看看它的底层接口源码:

1. ArrayList 实现的接口 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable

其中继承的接口中的 RandomAccess、Cloneable 和 Serializable 只是标记接口,他们的接口内部没有具体的方法和参数:

public interface RandomAccess {} public interface Cloneable {} //覆盖clone(),能被克隆 public interface Serializable {} //支持序列化,能通过序列化传输

标记接口是计算机科学中的一种设计思路。编程语言本身不支持为类维护元数据。而标记接口则弥补了这个功能上的缺失——一个类实现某个没有任何方法的标记接口,实际上标记接口从某种意义上说就成为了这个类的元数据之一。运行时,通过编程语言的反射机制,我们就可以在代码里拿到这种元数据。

以Serializable接口为例。一个类实现了这个接口,说明它可以被序列化。因此,我们实际上通过Serializable这个接口,给该类标记了“可被序列化”的元数据,打上了“可被序列化”的标签。这也是标记/标签接口名字的由来。

此外AbstractList 继承AbstractCollection 抽象类,实现List接口。它实现了 List 的一些基本操作如(get,set,add,remove),是第一实现随机访问方法的集合类,但是不支持添加和替换。

2.ArrayList 的成员属性 private static final int DEFAULT_CAPACITY = 10; //默认初始容量为10 private static final Object[] EMPTY_ELEMENTDATA = {}; //空数组,用于空实例 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};//用于默认大小空实例的共享空数组实例。 transient Object[] elementData; //保存ArrayList数据的数组,transient修饰表示数组默认不会被序列化 private int size; //ArrayList中数组的个数 二、ArrayList 中的方法 Java ArrayList 中常用的方法: 方法 描述
add()   将元素插入到指定位置的 arraylist 中  
addAll()   添加集合中的所有元素到 arraylist 中  
clear()   删除 arraylist 中的所有元素  
clone()   复制一份 arraylist  
contains()   判断元素是否在 arraylist  
get()   通过索引值获取 arraylist 中的元素  
indexOf()   返回 arraylist 中元素的索引值  
removeAll()   删除存在于指定集合中的 arraylist 里的所有元素  
remove()   删除 arraylist 里的单个元素  
size()   返回 arraylist 里元素数量  
isEmpty()   判断 arraylist 是否为空  
subList()   截取部分 arraylist 的元素  
set()   替换 arraylist 中指定索引的元素  
sort()   对 arraylist 元素进行排序  
toArray()   将 arraylist 转换为数组  
toString()   将 arraylist 转换为字符串  
ensureCapacity()   设置指定容量大小的 arraylist  
lastIndexOf()   返回指定元素在 arraylist 中最后一次出现的位置  
retainAll()   保留 arraylist 中在指定集合中也存在的那些元素  
containsAll()   查看 arraylist 是否包含指定集合中的所有元素  
trimToSize()   将 arraylist 中的容量调整为数组中的元素个数  
removeRange()   删除 arraylist 中指定索引之间存在的元素  
replaceAll()   将给定的操作内容替换掉数组中每一个元素  
removeIf()   删除所有满足特定条件的 arraylist 元素  
forEach()   遍历 arraylist 中每一个元素并执行特定操作  

具体的方法细节可以看这里

三、ArrayList 中的扩容机制

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgpfs.html