一、List是什么?
List是有序的Collection,由于其是抽象的无法实例化,所以Java List共有三个实现类,分别是ArrayList、LinkedList和Vector
二、LIst的三个实现类
1.ArrayList(数组)
ArrayList是最常用的实现类,内部通过数组实现,允许元素进行快速随机访问。数组的确定是每个元素之间不能有间隔,当数组大小不满足是,需增加存储能力,就要将已经有数据的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
代码如下(示例):
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<String> arr=new ArrayList<String>();
// add 添加元素
arr.add("hello");
arr.add("ArrayList");
System.out.println(arr);
// set 修改指定位置的值,索引从0开始
arr.set(0,"Hello");
System.out.println(arr);
// indexOf 查找指定元素所在位置 按照输出索引值,从0开始计算位置
System.out.println(arr.indexOf("ArrayList"));
//get 得到对应索引的值 超出边界会报错
System.out.println(arr.get(1));
arr.add("hi");
arr.remove(2);
System.out.println(arr);
}
}
执行结果:
## 2.LinkedList(链表)
LinkList用链表结构存储数据,很适合数据动态的插入和删除,随机访问和遍历速度比较慢。另外,他提供了List接口中没有定义的方法,专门用户操作表头和表尾,可以当作堆、栈、队列和双向队列使用。
代码如下(示例):
import java.util.Arrays;
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList<String> lin=new LinkedList<String>();
// add 往链表添加一个元素
lin.add("hello");
lin.add("LinkedList");
System.out.println(lin);
// addAll 往链表添加一堆元素
lin.addAll(Arrays.asList("2", "3", "4", "5"));
System.out.println(lin);
lin.remove("5");
System.out.println(lin);
System.out.println(lin.get(2));
lin.set(2,"3");
System.out.println(lin);
lin.addFirst("a");
System.out.println(lin);
lin.addLast("z");
System.out.println(lin);
System.out.println(lin.contains("a"));
//迭代器
java.util.Iterator<String> it = lin.iterator();
//用while循环改进元素的判断和获取
while (it.hasNext()) {
String next = it.next();
System.out.println(next);
}
//可以直接输出第一个或者最后一个元素,起到队列或栈的作用
System.out.println("列表第一个是:"+lin.getFirst());
System.out.println("列表最后一个是:"+lin.getLast());
}
}
执行结果:
3.Vector(数组、线程同步 向量)
数组实现,支持线程同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高花费,因此,访问它比ArrayList慢
代码如下(示例):
无
总结
以上就是我对ArrayList进行的学习归总,我没有对其进行源码级别的阐述。简单的对List进行了我的理解的表达,它也是我在学习和开发过程中用的最多的一个数据结构。