List集合
java.util.list接口 extends Collection接口
▶ list接口的特点:
(1)有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123)
(2)有索引,包含了一些带索引的方法
(3)允许存储重复元素
▶ list接口中带索引的方法(特有方法):
(1)public void add(int index ,E element) --- 将指定的元素添加到该集合中的指定位置上
(2)public E get(int index) --- 返回集合中指定位置的元素
(3)public E remove(int index) --- 移除列表中指定位置的元素,返回的是被移除的元素
(4)public E set(int index , E element ) --- 用指定元素替换集合中指定位置的元素,返回值是更新前的元素
【注意:在用到索引的时候一定要防止索引越界
IndexOutofBoundException --- 集合索引越界异常
ArrayIndexOutOfBoundsException --- 数组索引越界异常
StringIndexOutOfBoundsException --- 字符串索引越界异常
】
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Demo01 {
public static void main(String[] args) {
// 创建一个List集合对象,多态
List<String> list = new ArrayList<>() ;
// 使用add方法往集合中添加元素
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("a");
// 打印集合,输出的不是地址说明重写了toString()方法
System.out.println(list);
// 在c和d之间添加一个xiaochi
list.add(3,"xiaochi");
System.out.println(list);
// 移除元素c
String m = list.remove(2);
System.out.println("被移除的元素:"+m);
System.out.println(list);
// 替换最后一个a为A
String n = list.set(4,"A");
System.out.println("被替换的元素:"+n);
System.out.println(list);
// list集合遍历有3种方式
// ① 使用普通的for循环
for(int i = 0;i<list.size();i++) {
String s = list.get(i);
System.out.println(s);
}
System.out.println("-------------------------");
// ②使用迭代器
Iterator<String> it = list.iterator();
while(it.hasNext()) {
String s =it.next();
System.out.println(s) ;
}
// ③使用增强for循环
for(String s : list) {
System.out.println(s);
}
}
}
▶ list集合有两个实现类:
(1)ArrayList 集合
查看该集合的底层代码可以发现它其实是数组,而数组的特点是 “ 查询快,增删慢 ” ,所以这个集合的特点也是 “查询快,增删慢 ”
(2)LinkedList 集合
java.util.LinkedList 集合 implements List 接口
LinkedList 集合的特点:① 底层是一个链表结构:查询慢,增删快
② 里面包含了大量的操作首尾元素的方法
③ 使用LinkedList 集合特有的方法,不能使用多态
常见方法:public void addFirst(E e) --- 将指定元素插入此列表的开头
public void addLast(E e) --- 将指定元素添加到此列表的结尾
public void push(E e) --- 将元素推入此列表所表示的堆栈(等效于 addFirst()方法 )
public E getFirst() --- 返回此列表的第一个元素
public E getLast() --- 返回此列表的最后一个元素
public E removeFirst() --- 移除并返回此列表的第一个元素
public E removeLast() --- 移除并返回此列表的最后一个元素
public E pop() --- 从此列表所表示的堆栈处弹出一个元素
public boolean isEmpty() --- 如果列表不包含元素则返回true
import java.util.LinkedList;
public class Demo02 {
public static void main(String[] args) {
show01() ;
show02() ;
show03() ;
}
private static void show01() {
// 创建LinkedList集合对象
LinkedList<String> linked = new LinkedList<>() ;
// 使用add方法往集合中添加元素
linked.add("a");
linked.add("b");
linked.add("c");
System.out.println(linked);
// 往集合开头添加元素
linked.addFirst("xiaochi");
linked.push("www");
System.out.println(linked);
// 往集合结尾添加元素
linked.addLast("aaa");
System.out.println(linked);
}
private static void show02() {
// 创建LinkedList集合对象
LinkedList<String> linked1 = new LinkedList<>() ;
// 使用add方法往集合中添加元素
linked1.add("a");
linked1.add("b");
linked1.add("c");
System.out.println(linked1);
String first = linked1.getFirst() ;
System.out.println(first);
String last = linked1.getLast() ;
System.out.println(last);
}
private static void show03() {
// 创建LinkedList集合对象
LinkedList<String> linked2 = new LinkedList<>() ;
// 使用add方法往集合中添加元素
linked2.add("a");
linked2.add("b");
linked2.add("c");
System.out.println(linked2);
String first = linked2.removeFirst() ;
System.out.println(first);
String last = linked2.removeLast() ;
System.out.println(last);
System.out.println(linked2);
}
}