1、集合框架
集合框架被设计成要满足以下几个目标。
-
该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
-
该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
-
对一个集合的扩展和适应必须是简单的。
为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList, HashSet, 和 TreeSet 等,除此之外你也可以通过这些接口实现自己的集合。
2、集合常用方法
2.2.1 ArrayList组成
private static final Object[] EMPTY_ELEMENTDATA = {};
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}
//真正存放元素的数组
transient Object[] elementData; // non-private to simplify nested class access
private int size;
2.2.2 ArrayList构造函数
>public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elementData = EMPTY_ELEMENTDATA;
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
- Object[] elementData 是ArrayList真正存放数据的数组。
- ArrayList支持默认大小构造,和空构造,当空构造的时候存放数据的Object[] elementData是一个空数组{}。
2.2.3 ArrayList中添加元素
>public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
注意ArrayList中有一个modCount的属性,表示该实例修改的次数。(所有集合中都有modCount这样一个记录修改次数的属性),每次增改添加都会增加一次该ArrayList修改次数,而上边的add(E e)方法是将新元素添加到list尾部。
2.2.4 ArrayList扩容
private static int calculateCapacity(Object[] elementData, int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
//DEFAULT_CAPACITY是10
return Math.max(DEFAULT_CAPACITY, minCapacity);
}
return minCapacity;
}
方法名 | 说明 |
boolean add(E e) | 添加元素,返回值表示添加是否成功 |
boolean remove(E e) | 删除指定元素,返回值表示添加是否成功 |
E remove(int index) | 删除指定索引的元素,返回被删除的元素 |
E set(int index,E e) | 修改指定索引下的元素,返回原来的元素 |
E get(it index) | 获取指定索引的元素 |
int size() | 集合的长度,也就是集合中的元素个数 |
代码演示:
import java.util.ArrayList;
public class ArrayListDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.创建一个集合
ArrayList<String> list=new ArrayList<>();
//2.添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
//3.删除元素
boolean result1=list.remove("aaa");
System.out.println(result1);
boolean result2=list.remove("aaa");
System.out.println(result2);
//4.修改元素
String result3=list.set(0, "ddd");
System.out.println(result3);
System.out.println(list);
//5.遍历集合
for(int i=0;i<list.size();i++) {
String str=list.get(i);
}
}
}