15--API-ArrayList--LinkedList
ArrayList(实现类)
概述:
-
存在于java.util包中。
-
内部用数组存放数据,封装了数组的操作,每个对象都有下标。
-
内部数组默认初始容量是10。如果不够会以1.5倍容量增长。
-
查询快,增删数据效率会降低。
特点:
- 是list接口的实现类, 拥有list接口的特点, 有序, 有索引, 底层使用数组实现, 方便查询
- 可以使用
Collection
抽象类和List
接口的通用方法
常用构造方法
方法 | 说明 |
---|---|
ArrayList() | 无参构造 |
常用特有方法
无
注意: remove() 可以按照下标删除, 也可以直接指定元素值, 如果元素是Integer类型, 哪么可能会出现意外的结果
如下实例:
// 创建ArrayList对象
List<Integer> a1 = new ArrayList<>();
a1.add(1);
a1.add(2);
a1.add(3);
a1.add(4);
a1.add(100);
// remove() 可以按照下标删除, 也可以直接指定元素值
System.out.println(a1.remove(2)); // 按照下标删除
System.out.println(a1.remove(Integer.valueOf(100))); // 按照元素进行删除
由上例可见: 直接传入数字会默认按照下标进行删除, 只有传入包装类型的时候才会按元素删除
LinkedList(实现类)
概述:
双向链表,两端效率高。底层就是数组和链表实现的。
特点:
- List接口的实现类, 拥有List接口的特点, 可以重复, 有索引, 有序, 底层是一个链表结构的实现. 查询比
ArrayList
复杂, 但是适用于增删业务 - 可以使用
Collection
抽象类和List
接口的通用方法 - 双向链表:下标遍历效率低,迭代器遍历效率高
常用构造方法
方法 | 说明 |
---|---|
LinkedList() | 无参构造 |
常用特有方法
返回值 | 方法 | 说明 |
---|---|---|
void | addFirst(E e) | 添加首元素 |
void | addLast(E e) | 添加尾元素 |
E | getFirst() | 获取首 元素 |
E | getLash() | 获取尾元素 |
E | removeFirst() | 移除首元素, 并返回被移除元素的值 |
E | removeLash() | 移除尾元素, 并返回被移除元素的值 |
测试案例:
双向链表:下标遍历效率低,迭代器遍历效率高
public class Test1_ArrayList {
public static void main(String[] args) throws Exception {
LinkedList ll = new LinkedList ();
for (int i = 0; i < 100000; i++) {
ll.add(100);
}
f1(ll);
f2(ll);
}
private static void f2(LinkedList<Integer> ll) {
long t = System.currentTimeMillis();
Iterator it = ll.iterator();
while(it.hasNext()) {
it.next();
}
t = System.currentTimeMillis()-t;
System.out.println("=====iterator========="+t);//16
}
private static void f1(LinkedList<Integer> ll) {
long t = System.currentTimeMillis();
for (int i = 0; i < ll.size(); i++) {
ll.get(i);
}
long t1 = System.currentTimeMillis();
System.out.println("~~~~for~~~~~~~"+(t1-t));//9078
}
}