集合-Collection家族-List接口
List接口
1 特点
有序且可重复(因为List接口中添加了许多针对下标操作的方法)
2 四种实现类的数据类型与特点
a. ArrayList
数据结构:一维数组
特点:存储数据 b. LinkedList
数据结构:双向列表
特点:队列模式、栈模式 c. Vector
数据结构:一维数组
特点:线程安全
d. Stack
继承关系:class Stack extends Vector
特点:栈模式
3 ArrayList(实现类)
3.1 ArrayList的使用
package com.qf.arraylist_class;
import java.sql.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Test01 {
/**
* 知识点:ArrayList的使用
*/
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
//添加数据
list.add("小希");
list.add("小空");
list.add("小丽");
list.add("小光");
list.add("小步");
//设置指定下标上的元素
list.set(1, "小康");
//获取指定下标上的元素
String str = list.get(1);
System.out.println("获取指定下标上的元素:" + str);//侯小康
//获取元素个数
int size = list.size();
System.out.println("获取元素个数:" + size);//5
//在指定下标上添加元素
list.add(2, "小飞");
ArrayList<String> newList1 = new ArrayList<>();
Collections.addAll(newList1, "aaa","bbb","ccc","ccc");//利用集合工具类(Collections)批量添加元素
list.addAll(newList1);//将newList1中所有的元素都添加到list集合里末尾的位置
ArrayList<String> newList2 = new ArrayList<>();
Collections.addAll(newList2, "xxx","xxx","yyy","yyy","zzz","zzz");//利用集合工具类(Collections)批量添加元素
list.addAll(3, newList2);//将newList2中所有的元素都添加到list集合里指定下标的位置
//清空集合里所有的元素
//list.clear();
System.out.println("判断集合中是否包含指定元素:" + list.contains("小康"));//true
System.out.println("判断集合中是否包含指定集合:" + list.containsAll(newList1));//true
System.out.println("获取元素在集合中第一次出现的下标:" + list.indexOf("ccc"));//12
System.out.println("获取元素在集合中最后一次出现的下标:" + list.lastIndexOf("ccc"));//13
//没有-true,有-false
System.out.println("判断集合里是否没有元素:" + list.isEmpty());//false
list.remove(9);//通过下标删除元素
list.remove("小丽");//通过数据删除元素
list.removeAll(newList1);//将list中有newList1的元素全部删除(去除交集)
list.retainAll(newList2);//将list中有newList2的元素全部保留(保留交集)
List<String> subList = list.subList(1, 4);//从开始下标处(包含)截取到结束下标处(排他)的元素,返回新的集合
//将集合转换为数组
Object[] array1 = subList.toArray();
System.out.println(Arrays.toString(array1));//[xxx, yyy, yyy]
//将集合转换为指定类型的数组
String[] array2 = new String[3];
subList.toArray(array2);
System.out.println(Arrays.toString(array2));//[xxx, yyy, yyy]
System.out.println("-----------------------------------------");
//遍历集合 -- for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("-----------------------------------------");
//遍历集合 -- foreach
for (String element : list) {
System.out.println(element);
}
System.out.println("-----------------------------------------");
//遍历集合 -- Iterator
Iterator<String> it = list.iterator();
while(it.hasNext()){//判断是否有可迭代的元素
String next = it.next();//获取下一个元素
System.out.println(next);
}
System.out.println("-----------------------------------------");
//遍历集合 -- ListIterator
ListIterator<String> listIterator = list.listIterator();
while(listIterator.hasNext()){//判断是否有可迭代的元素
String next = listIterator.next();//获取下一个元素
System.out.println(next);
}
}
}
4 LinkedList(实现类)
4.1 LinkedList的使用(同ArrayList-略)
4.2 LinkedList独有的方法
package com.qf.linkedlist_class;
import java.util.LinkedList;
public class Test02 {
/**
* 知识点:LinkedList独有的方法
*/
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("小希1");
list.add("小希2");
list.add("小希3");
list.add("abc");
list.add("abc");
list.add("AAA");
list.add("abc");
list.add("abc");
//添加到头部
list.addFirst("aaa");
list.offerFirst("bbb");
list.push("ccc");
//添加到末尾
list.addLast("xxx");
list.offer("yyy");
list.offerLast("zzz");
System.out.println("获取第一个元素:" + list.element());
System.out.println("获取第一个元素:" + list.getFirst());
System.out.println("获取第一个元素:" + list.peek());
System.out.println("获取第一个元素:" + list.peekFirst());
System.out.println("获取第一个元素:" + list.pop());
System.out.println("获取最后一个元素:" + list.getLast());
System.out.println("获取最后一个元素:" + list.peekLast());
//删除第一个元素
list.poll();
list.pollFirst();
list.removeFirst();
//删除最后一个元素
list.pollLast();
list.removeLast();
//删除第一次出现的元素
list.removeFirstOccurrence("abc");
//删除最后一次出现的元素
list.removeLastOccurrence("abc");
//倒序遍历
// Iterator<String> descendingIterator = list.descendingIterator();
// while(descendingIterator.hasNext()){
// String next = descendingIterator.next();
// System.out.println(next);
// }
for (String element : list) {
System.out.println(element);
}
}
}
4.3 LinkedList实现队列模式
package com.qf.linkedlist_class;
import java.util.LinkedList;
public class Test03 {
/**
* 知识点:LinkedList实现队列模式
*
* 注意:队列模式 - 先进先出
*/
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
while(!list.isEmpty()){
//String element = list.pollFirst();
String element = list.removeFirst();
System.out.println(element);
}
System.out.println("集合的元素个数为:" + list.size());//0
}
}
4.4 LinkedList实现栈模式
package com.qf.linkedlist_class;
import java.util.LinkedList;
public class Test04 {
/**
* 知识点:LinkedList实现栈模式
*
* 注意:栈模式 - 先进后出/后进先出
*/
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
while(!list.isEmpty()){
String element = list.removeLast();
System.out.println(element);
}
System.out.println("集合的元素个数为:" + list.size());//0
}
}