一、List接口
1、List的特点
有序、可重复、有索引。
2、特有方法
方法 | 说明 |
---|---|
void add(int index, E element) | 在指定的索引添加元素 |
E get(int index) | 获取指定索引处的元素 |
E remove(int index) | 删除指定索引处的元素 |
E set(int index, E element) | 修改指定索引处的元素 |
代码演示
import java.util.ArrayList;
import java.util.List;
/*
void add(int index, E element)在指定的索引添加元素
E get(int index)获取指定索引处的元素
E remove(int index)删除指定索引处的元素
E set(int index, E element)修改指定索引处的元素
*/
public class TestList {
public static void main(String[] args) {
//创建list集合
List<String> list = new ArrayList();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
//void add(int index, E element)在指定的索引添加元素
//list.add(2,"ee");
//E get(int index)获取指定索引处的元素
// String s = list.get(1);
// System.out.println(s);
//E remove(int index)删除指定索引处的元素
// String s = list.remove(1); //返回值是删除的元素
// System.out.println(s);
// boolean b = list.remove("bb");
// System.out.println(b);
//E set(int index, E element)修改指定索引处的元素
list.set(1, "gg");
System.out.println(list);
}
}
3、ArrayList集合
ArrayList底层用的是数组来存储数据。
所以ArrayList集合特点增删元素慢,查询元素快。
4、LinkedList集合
LinkedList底层用的是双向链表来存储数据。
所以LinkedList集合特点增删元素快,查询元素慢。
两个集合效果演示
import java.util.ArrayList;
import java.util.LinkedList;
public class TestArrayListAndLinedList {
public static void main(String[] args) {
//测试ArrayList
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("宋喆");
arrayList.add("马蓉");
long start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
arrayList.add(1,"宝强");
}
long end = System.currentTimeMillis();
System.out.println("ArrayList使用时间为:"+(end-start));
//测试LinkedList
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("宋喆");
linkedList.add("马蓉");
long start1 = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
linkedList.add(1,"宝强");
}
long end1 = System.currentTimeMillis();
System.out.println("LinkedList使用时间为:"+(end1-start1));
}
}
——————————————————————————————————————————————————————————————————————————————
ArrayList使用时间为:8毫秒
LinkedList使用时间为:2毫秒
LinkedList的特有方法
因为底层是双向链表所以有和头尾先关的操作方法,知道就可以了不用记。
方法 | 说明 |
---|---|
void addFirst(E e) | 往开头添加元素 |
void addLast(E e) | 往末尾添加元素 |
E getFirst() | 获取开头的元素 |
E getLast() | 获取末尾的元素 |
E removeFirst() | 删除开头的元素 |
E removeLast() | 删除末尾的元素 |
代码演示
import java.util.LinkedList;
public class TestLinkedList {
public static void main(String[] args) {
//创建对象
//LinkedList的底层是双向链表
LinkedList<String> list = new LinkedList<>();
//添加方法
list.add("宋喆");
list.add("马蓉");
//给开头添加
list.addFirst("王宝强");
//给末尾添加
list.addLast("白百何");
System.out.println(list); //[王宝强, 宋喆, 马蓉, 白百何]
//获取开头的元素
String first = list.getFirst();
System.out.println(first);
//获取结尾的元素
String last = list.getLast();
System.out.println(last);
//删除开头的元素
list.removeFirst();
//删除结尾的元素
list.removeLast();
System.out.println(list); //[宋喆, 马蓉]
}
}
遍历的总结
import java.util.ArrayList;
import java.util.Iterator;
public class Test04 {
public static void main(String[] args) {
//创建对象
ArrayList<String> list = new ArrayList<>();
list.add("宋喆");
list.add("王宝强");
list.add("贾乃亮");
//迭代器
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
System.out.println("======================");
//增强for
for (String s : list) {
System.out.println(s);
}
System.out.println("======================");
//普通for遍历
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
System.out.println(s);
}
/*
对于List来说因为有索引所以其实都能用,如果是没有索引的集合就只能用迭代器和增强for
List:
如果需要索引或者增删元素就用普通for
如果为了方便就用增强for
一般不需要迭代器
Set:
如果为了方便就用增强for
如果需要遍历的时候删除元素就用迭代器
*/
}
}