一、LinkedList常见方法
1. add() 和 addAll()方法
@Test
void test01() {
List<Integer> ns = new ArrayList<>();
ns.add(1);
ns.add(2);
ns.add(3);
ns.add(4);
ns.add(5);
ns.add(6);
List<Integer> nums = new LinkedList<>();
nums.add(11);
nums.add(112);
nums.add(0, 123);
nums.addAll(ns);
System.out.println(nums);
}
@Test
void test02() {
List<Integer> ns = new ArrayList<>();
ns.add(1);
ns.add(2);
ns.add(3);
ns.add(4);
ns.add(5);
ns.add(6);
List<Integer> nums = new LinkedList<>();
nums.add(11);
nums.add(112);
nums.add(0, 123);
ns.addAll(nums);
System.out.println(ns);
}
2. subList()方法
注意:前闭后开区间
@Test
void test03() {
List<Integer> nums = new LinkedList<>();
nums.add(11);
nums.add(112);
nums.add(1122);
nums.add(1128);
nums.add(1129);
nums.add(0, 123);
System.out.println(nums);
System.out.println(nums.size());
// 切割一个全新的子列表
System.out.println(nums.subList(1, 3));
nums.forEach(new MyConsumer());
}
二、LinkedList作为栈的使用
LinkedList不仅仅是一个简单的双向链表
同时也是一种栈
FILO 先进后出的栈
@Test
void testLinkedListAsStack() {
LinkedList<Integer> nums = new LinkedList<>();
// 推入栈中
nums.push(1230);
nums.push(456);
nums.push(789);
nums.push(852);
nums.push(147);
nums.push(123654);
System.out.println(nums);
// 弹出栈
System.out.println(nums.pop());
System.out.println(nums.pop());
System.out.println(nums.pop());
System.out.println(nums.peek());
System.out.println(nums.size());
}
三、LinkedList作为队列的使用
LinkedList不仅仅是一个简单的双向链表
同时也是一种队列;
FIFO 先进先出的队列
boolean offer(E e) :将指定元素添加到此列表的末尾(最后一个元素)
E poll() :获取并移除此列表的头(第一个元素)
E element() :获取但不移除此列表的头(第一个元素)
@Test
void testLinkedListAsQueue() {
LinkedList<Integer> nums = new LinkedList<>();
// 添加到队列中
nums.offer(1230);
nums.offer(456);
nums.offer(789);
nums.offer(852);
nums.offer(147);
System.out.println(nums);
// 出队列
System.out.println(nums.poll());
System.out.println(nums.poll());
System.out.println(nums.poll());
// 看一看第一个队列顶部元素是什么
System.out.println(nums.element());
System.out.println(nums.size());
}
四、LinkedList作为双端队列的使用
LinkedList 也可以作为双端队列
void addFirst(E e) :将指定元素插入此列表的开头。
void addLast(E e) :将指定元素添加到此列表的结尾。
E removeFirst() :移除并返回此列表的第一个元素。
E removeLast() :移除并返回此列表的最后一个元素。
E getFirst() :返回此列表的第一个元素。
E getLast() :返回此列表的最后一个元素。
boolean offerFirst(E e) :在此列表的开头插入指定的元素。
boolean offerLast(E e) :在此列表的末尾插入指定的元素。
E pollFirst() :获取并移除此列表的第一个元素;如果此列表为空,则返回 null 。
E pollLast() :获取并移除此列表的最后一个元素;如果此列表为空,则返回 null 。
E peekFirst() :获取但不移除此列表的第一个元素;如果此列表为空,则返回 null 。
E peekLast() :获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null 。
前六个方法的作用和后六个作用一样,不同之处在于,前六个失败会抛出异常,后面的是返回boolean或者返回null来表示
1. addFirst、 addLast、 removeFirst、 removeLast()
@Test
void testLinkedListAsDeQueue() {
LinkedList<Integer> nums = new LinkedList<>();
// 头部添加元素
nums.addFirst(123);
nums.addFirst(456);
// 尾部添加元素
nums.addLast(789);
nums.addLast(159);
System.out.println(nums);
//移除第一个,最后一个元素
System.out.println(nums.removeFirst());
System.out.println(nums.removeLast());
System.out.println(nums);
}
2. getFirst、getLast
1)、正常情况
@Test
void testLinkedListAsDeQueue() {
LinkedList<Integer> nums = new LinkedList<>();
// 头部添加元素
nums.addFirst(123);
nums.addFirst(456);
// 尾部添加元素
nums.addLast(789);
nums.addLast(159);
System.out.println(nums);
// 获取队列的头尾
System.out.println(nums.getFirst());
System.out.println(nums.getLast());
System.out.println(nums);
}
2)、元素为空,无返回值,就只能抛异常
@Test
void testLinkedListAsDeQueue() {
LinkedList<Integer> nums = new LinkedList<>();
// 获取队列的头尾
System.out.println(nums.getFirst());
System.out.println(nums.getLast());
System.out.println(nums);
}
3.offerFirst、offerLast
@Test
void testLinkedListAsDeQueue() {
LinkedList<Integer> nums = new LinkedList<>();
// 头部添加元素
nums.addFirst(123);
nums.addFirst(456);
// 尾部添加元素
nums.addLast(789);
nums.addLast(159);
System.out.println(nums);
// 返回布尔值类来表示是否成功
System.out.println(nums.offerFirst(1));
System.out.println(nums.offerLast(1));
System.out.println(nums);
}
@Test
void testLinkedListAsDeQueue() {
LinkedList<Integer> nums = new LinkedList<>();
// 返回布尔值类来表示是否成功
System.out.println(nums.offerFirst(1));
System.out.println(nums.offerLast(1));
System.out.println(nums);
}
4. pollFirst、pollLast
1)、正常情况
@Test
void testLinkedListAsDeQueue() {
LinkedList<Integer> nums = new LinkedList<>();
// LinkedList 也可以作为双端队列
// 头部添加元素
nums.addFirst(123);
nums.addFirst(456);
nums.addLast(789);
nums.addLast(159);
System.out.println(nums.pollFirst());
System.out.println(nums.pollLast());
}
2)、元素为空,返回失败,则返回null来表示
@Test
void testLinkedListAsDeQueue() {
LinkedList<Integer> nums = new LinkedList<>();
// 如果失败,则返回null来表示,否则返回删除的元素
System.out.println(nums.pollFirst());
System.out.println(nums.pollLast());
}
5. peekFirst、peekLast
1)、正常情况
@Test
void testLinkedListAsDeQueue() {
LinkedList<Integer> nums = new LinkedList<>();
// LinkedList 也可以作为双端队列
// 头部添加元素
nums.addFirst(123);
nums.addFirst(456);
nums.addLast(789);
nums.addLast(159);
System.out.println(nums.peekFirst());
System.out.println(nums.peekLast());
}
2)、元素为空,返回失败,则返回null来表示
@Test
void testLinkedListAsDeQueue() {
LinkedList<Integer> nums = new LinkedList<>();
System.out.println(nums.peekFirst());
System.out.println(nums.peekLast());
}