- 1.ArrayList底层结构
- 2.ArrayList源码分析
- 3.练习
(1)注意事项
- ArrayList可以加入null,并且可以是多个。
- ArrayList是由数组来实现数据存储的。
- ArrayList基本等同于Vector,除了ArrayList是线程不安全(执行效率高),在多线程情况下,不建议使用ArrayList。
(2)底层结构
由上图可以看到:
ArrayList 继承至AbstractList类,并实现了List、Serializable、Cloneable、RandomAccess接口。
(3)方法
2.ArrayList源码分析(1)结论
- ArrayList中维护了一个Object类型的数组elementData,transient Object[] elementData;//transient表示瞬间,短暂的,表示该属性不会被序列化
- 当创建ArrayList对象时,如果使用的是无参构造器,则初试elementData容量为0,第一次添加则扩容elementData为10,如果再次添加,这扩容为elementData的1.5倍,也就是15,后面扩展依次类推。
- 如果使用的是指定大小的构造器,则初试elementData容量为指定大小,如果需要扩容,则直接扩容elementData为1.5倍。
(2)底层源码剖析
- 使用ArrayList的无参构造器初始化(源码解析):
- 使用ArrayList有参构造器(源码解析):
主要ArrayList的一些常用方法练习:
public static void main(String[] args) {
List list = new ArrayList();
// add:添加单个元素
list.add("jack");
list.add(10);
list.add(new Integer(10));
list.add(true);
System.out.println("list=" + list);
// remove:删除指定元素 //
list.remove(0);
//删除第一个元素
list.remove(true);
//指定删除某个元素
System.out.println("list=" + list);
// contains:查找元素是否存在 S
System.out.println(list.contains("jack"));//T
// size:获取元素个数
System.out.println(list.size());//2
// isEmpty:判断是否为空
System.out.println(list.isEmpty());
// addAll:添加多个元素
ArrayList list2 = new ArrayList();
list2.add("红楼梦");
list2.add("三国演义");
list.addAll(list2);
System.out.println("list=" + list);
// containsAll:查找多个元素是否都存在
System.out.println(list.containsAll(list2));
// removeAll:删除多个元素
list.add("聊斋");
list.removeAll(list2);
System.out.println("list=" + list);//[聊斋]
//toArray():将列表以数组的形式返回,类型为Object
Object[] objects = list.toArray();
System.out.println(objects.toString().toCharArray());
//iterator():迭代器,集合专用遍历方式
Iterator iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)