Java_总结十四(集合——List接口——List中常用的两个实现类ArrayList、LinkedList)
一、List接口
--实现List接口的集合类中的元素是有序(元素插入集合的顺序)的,且允许重复。
--List集合中的元素都对应一个整数型的序号记载其在集合中的位置,可以根据序号存取集合中的元素
List接口比Collection接口中新增的几个实用方法:
--public Object get(int index) 返回列表中指定位置的元素
--public void add(int index, Object element) 在列表的指定位置插入指定元素.将当前处于该位置的元素(如果有的话)和所有后续元素向右移动
--public Object set(int index, Object element) 用指定元素替换列表中指定位置的元素,返回替换出来的元素
--public Object remove(int index) 移除列表中指定位置的元素
--List subList(int fromIndex, int toIndex) 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。
--int indexOf(Object o) 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回-1
二、ArrayList集合类
ArrayList是使用数组结构实现的List集合
优点: 对于使用索引取出元素有较好的效率(随机访问) 它使用索引来快速定位对象
缺点: 元素做删除或插入速度较慢 因为使用了数组,需要移动后面的元素以调整索引顺序。
import java.util.ArrayList; import java.util.List; public class Test09 { public static void main(String[] args) { //创建一个ArrayList集合类,有泛型就限定集合中插入元素的类型;如果没有泛型,则可以插入任意类型元素,混合插入 ArrayList<Integer> list = new ArrayList<>(); list.add(3); list.add(1); list.add(4); list.add(6); //获取指定位置的元素,从位置下标0开始 System.out.println("位置下标2的元素是---" + list.get(2)); //向指定位置插入指定元素 list.add(2, 5); System.out.println("向位置下标2插入元素5---" + list); //用指定元素替换指定位置的元素,返回被替换的元素 int result = list.set(4, 7); System.out.println("被替换的元素---" + result + "---" + list); //删除指定位置的元素 list.remove(4); System.out.println("删除元素后的集合---" + list); //返回指定区域的元素,范围是左开右闭 List list2 = list.subList(1, 4); System.out.println("1-4区域的元素---" + list2); //返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回-1 int index = list.indexOf(3); System.out.println("3的下标是---" + index); } }
结果:
位置下标2的元素是---4 向位置下标2插入元素5---[3, 1, 5, 4, 6] 被替换的元素---6---[3, 1, 5, 4, 7] 删除元素后的集合---[3, 1, 5, 4] 1-4区域的元素---[1, 5, 4] 3的下标是---0
三、LinkedList集合类
--LinkedList是使用双向链表实现的集合。
--LinkedList新增了一些插入、删除的方法。
优点: 对频繁的插入或删除元素有较好的效率 适合实现栈(Stack)和队列(Queue)
常用的方法:
--void addFirst(E e) 将指定元素插入此双端队列的开头。
--void addLast(E e) 将指定元素添加到此列表的结尾。等效于add(E e)
--E getFirst() 返回此列表的第一个元素,等效于element(),只看不动.
--E getLast() 返回此列表的最后一个元素。只看不动.
模拟栈的结构:后进先出:LastInFirstOut:LIFO
--E pop()从此列表所表示的堆栈处弹出一个元素。移除并返回此列表的第一个元素,等效于 removeFirst()
--void push(E e) 将元素推入此列表所表示的堆栈。将该元素插入此列表的开头。 此方法等效于 addFirst(E)
模拟队列的功能:先进先出:FirstInFirstOut:FIFO
--public boolean offer(E e) 将指定元素添加到此列表的末尾(最后一个元素)等效于offerLast()
--public E poll() 获取并移除此列表的头(第一个元素)等效于 pollFirst()
--E peek()获取,但不移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素);如果此双端队列为空,则返回 null。 此方法等效于 peekFirst()。
import java.util.LinkedList; public class Test10 { public static void main(String[] args) { LinkedList<Integer> linkedList = new LinkedList<>(); //添加一个元素 linkedList.add(1); //插入到双端队列的开头 linkedList.addFirst(2); //插入到双端队列的结尾 linkedList.addLast(3); System.out.println(linkedList); } }