Java集合类之ArrayList
2016-03-01 17:03
183 查看
学习Java的集合类
(1)成员变量以及初始化
默认的大小为10。
EMPTY_ELEMENTDATA是用于无参初始化,即一个等于null的对象数组。
elemenData则用于有参初始化的变量,也是我们下面操作的主体对象。
下面看看有参初始化的源码:
此处初始化一个大小为initialCapacity的对象数组
由初始化的过程可以看出:ArrayList是基于动态数组实现的。
(2)常用操作
Add方法用于添加一个元素到当前列表的末尾
AddRange方法用于添加一批元素到当前列表的末尾
Remove方法用于删除一个元素,通过元素本身的引用来删除
RemoveAt方法用于删除一个元素,通过索引值来删除
RemoveRange用于删除一批元素,通过指定开始的索引和删除的数量来删除
Insert用于添加一个元素到指定位置,列表后面的元素依次往后移动
InsertRange用于从指定位置开始添加一批元素,列表后面的元素依次往后移动
Clear方法用于清除现有所有的元素
Contains方法用来查找某个对象在不在列表之中
TrimSize用于将ArrayList固定到实际元素的大小,当动态数组元素确定不在添加的时候,可以调用这个方法来释放空余的内存。
ToArray方法把ArrayList的元素Copy到一个新的数组中。
此处我们特殊需要看一下indexof的源码:
View Code
(1)成员变量以及初始化
private static final int DEFAULT_CAPACITY = 10; private static final Object[] EMPTY_ELEMENTDATA = {}; private transient Object[] elementData; private int size;
默认的大小为10。
EMPTY_ELEMENTDATA是用于无参初始化,即一个等于null的对象数组。
elemenData则用于有参初始化的变量,也是我们下面操作的主体对象。
下面看看有参初始化的源码:
public ArrayList(int initialCapacity) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = new Object[initialCapacity]; }
此处初始化一个大小为initialCapacity的对象数组
由初始化的过程可以看出:ArrayList是基于动态数组实现的。
(2)常用操作
// Collection中定义的API boolean add(E object) boolean addAll(Collection<? extends E> collection) void clear() boolean contains(Object object) boolean containsAll(Collection<?> collection) boolean equals(Object object) int hashCode() boolean isEmpty() Iterator<E> iterator() boolean remove(Object object) boolean removeAll(Collection<?> collection) boolean retainAll(Collection<?> collection) int size() <T> T[] toArray(T[] array) Object[] toArray() // AbstractCollection中定义的API void add(int location, E object) boolean addAll(int location, Collection<? extends E> collection) E get(int location) int indexOf(Object object) int lastIndexOf(Object object) ListIterator<E> listIterator(int location) ListIterator<E> listIterator() E remove(int location) E set(int location, E object) List<E> subList(int start, int end) // ArrayList新增的API Object clone() void ensureCapacity(int minimumCapacity) void trimToSize() void removeRange(int fromIndex, int toIndex)
Add方法用于添加一个元素到当前列表的末尾
AddRange方法用于添加一批元素到当前列表的末尾
Remove方法用于删除一个元素,通过元素本身的引用来删除
RemoveAt方法用于删除一个元素,通过索引值来删除
RemoveRange用于删除一批元素,通过指定开始的索引和删除的数量来删除
Insert用于添加一个元素到指定位置,列表后面的元素依次往后移动
InsertRange用于从指定位置开始添加一批元素,列表后面的元素依次往后移动
Clear方法用于清除现有所有的元素
Contains方法用来查找某个对象在不在列表之中
TrimSize用于将ArrayList固定到实际元素的大小,当动态数组元素确定不在添加的时候,可以调用这个方法来释放空余的内存。
ToArray方法把ArrayList的元素Copy到一个新的数组中。
此处我们特殊需要看一下indexof的源码:
/** * Save the state of the <tt>ArrayList</tt> instance to a stream (that * is, serialize it). * * @serialData The length of the array backing the <tt>ArrayList</tt> * instance is emitted (int), followed by all of its elements * (each an <tt>Object</tt>) in the proper order. */ private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{ // Write out element count, and any hidden stuff int expectedModCount = modCount; s.defaultWriteObject(); // Write out size as capacity for behavioural compatibility with clone() s.writeInt(size); // Write out all elements in the proper order. for (int i=0; i<size; i++) { s.writeObject(elementData[i]); } if (modCount != expectedModCount) { throw new ConcurrentModificationException(); } } /** * Reconstitute the <tt>ArrayList</tt> instance from a stream (that is, * deserialize it). */ private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { elementData = EMPTY_ELEMENTDATA; // Read in size, and any hidden stuff s.defaultReadObject(); // Read in capacity s.readInt(); // ignored if (size > 0) { // be like clone(), allocate array based upon size not capacity ensureCapacityInternal(size); Object[] a = elementData; // Read in all elements in the proper order. for (int i=0; i<size; i++) { a[i] = s.readObject(); } } }
View Code
相关文章推荐
- java基础50道编程题
- eclipse中jrebel安装+破解+配置
- java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener问题解决
- java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener问题解决
- java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener问题解决
- 找不到org.springframework.web.context.ContextLoaderListener问题解决
- JAVA Web开发过程中的路径问题
- myeclipse6.0安装maven插件
- Myeclipse10 maver web项目,java web 开发,快速入门,环境搭建
- Myeclipse10 maver web项目,java web 开发,快速入门,环境搭建
- java 模式分类
- MyEclipse 常用快捷键
- MyEclipse 常用快捷键
- MyEclipse 常用快捷键
- MyEclipse 常用快捷键
- MyEclipse 常用快捷键
- MyEclipse 常用快捷键
- MyEclipse 常用快捷键
- MyEclipse 常用快捷键
- MyEclipse 常用快捷键