我是靠谱客的博主 落后水杯,最近开发中收集的这篇文章主要介绍集合Collection——List接口List,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文介绍集合中的List其实现方式及相关操作,其常用的实现子类有ArrayList、LinkedList、Vector及其子类Stack。

接口List<E>

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素(支持角标访问)。

ArrayList

  • 简介
  • List 接口的大小可变数组(动态数组)的实现。
  • 实现了所有可选列表操作,并允许包括 null 在内的所有元素。
  • 每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。
  • 它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。
  • 注意,此实现不是同步的。(线程不安全)
  • 其他所有操作都以线性时间运行
  •  常用方法

void add(int index, E element)  在指定角标index处添加元素element,开始最好从角标0添加元素 并且角标最好连续的

boolean addAll(int index, Collection<? extends E> c)  在指定角标处添加一个指定的集合中所有的元素

E get(int index)  返回列表当中指定角标index处的元素

int indexOf(Object o)  返回指定元素从左到右第一次出现的角标

int lastIndexOf(Object o) 返回指定元素从右到左第一次出现的角标

E remove(int index)  删除指定角标处index的元素 并返回该删除的元素

E set(int index, E element)  修改列表当中指定角标处index的元素为新元素element

List<E> subList(int fromIndex, int toIndex)  截取列表中[from,to)之间的元素 并且返回List

  • 方法使用示例
public class ListDemo {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<Integer>();
List<Integer> list2 = new ArrayList<Integer>();
list1.add(0, 10);//类似于在列表头部添加元素
list1.add(1, 20);//类似于在列表尾部添加元素
list1.add(2, 30);//类似于在列表尾部添加元素
list1.add(3, 40);//类似于在列表尾部添加元素
list1.add(1, 50);//类似于插入的操作
list1.add(0, 60);//类似于在列表头部添加元素
list2.add(0,50);
list2.add(1,20);
list2.add(1,30);
System.out.println(list1);
System.out.println(list2);
list1.addAll(3,list2);//将集合list2的元素全部插入list1
System.out.println(list1);
System.out.println(list1.get(3));//获取角标为3的元素
System.out.println(list1.indexOf(50));//返回指定元素50第一次出现的角标
System.out.println(list1.remove(3));//删除指定位置3的元素
System.out.println(list1);
List<Integer> list3 = list1.subList(1, 4);//截取list1中的1~4角标处的元素为一个新的列表
System.out.println(list3);
System.out.println(list1);//截取后并不改变list1
list1.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//o1 和 o2 是由前后关系的
//前 - 后 < 0 说明前者更靠前
//后 - 前 < 0 说明后者更靠前
//o1前 o2后
o1 - o2
//o2前 o1后
o2 - o1
return o2 - o1;
}
});
System.out.println(list1);
}
}

 

LinkedList

  • 简介
  • List 接口的链接列表实现。
  • 除了实现了List的功能之外 还实现了Queue(Deque)队列接口。
  • 该实现子类 可以当做列表、队列、栈、双端队列。

  • LinkedList本质上就是一个【双向循环链表】。

  • 允许所有元素(包括 null)。

  • LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。

  • 所有操作都是按照双重链接列表(双向循环链表)的需要执行的,在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。

  • 注意,此实现不是同步的。(线程不安全)

  •   常用方法

1.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。

2.LinkedList用作队列
boolean offer(E e)  入队一个元素 将指定元素添加到此列表的末尾(最后一个元素)。
E poll()  出队 获取并移除此列表的头(第一个元素)
E element()  获取当前队列的头元素

3.LinkedList用作栈
void push(E e)  将元素推入此列表所表示的堆栈。
E pop() 从此列表所表示的堆栈处弹出一个元素。
E peek()  获取但不移除此列表的头(第一个元素)。

  •  方法使用示例
public class LinkedListDemo {
public static void main(String[] args) {
/*
如果LinkedList当做双端队列去看,操作主要在head和rear身上
在head的地方可以进行增删
在rear的地方可以进行增删
head ———————————————— rear
*/
LinkedList<Integer> deque = new LinkedList<Integer>();
deque.addFirst(1);	//1
deque.addFirst(2);	//2 1
deque.addLast(3);	//2 1 3
deque.addLast(4);	//2 1 3 4
System.out.println(deque); //[2, 1, 3, 4]
deque.removeFirst();//1,3,4
deque.removeLast();//1,3
System.out.println(deque);//[1,3]
System.out.println(deque.offerFirst(0));//true
System.out.println(deque.offerLast(4));//true
System.out.println(deque);//[0,1,3,4]
deque.pollFirst();//0
deque.pollLast();//4
System.out.println(deque);//[1,3]
System.out.println(deque.peekFirst());//1
System.out.println(deque.peekLast());//3
/*如果LinkedList当做队列去看,操作主要在head和rear身上
在head的地方只能进行出队
在rear的地方只能进行入队
head ———————————————— rear
*/
LinkedList<Integer> queue = new LinkedList<Integer>();
queue.offer(1);	//1
queue.offer(2);	//1 2
queue.offer(3);	//1 2 3
System.out.println(queue);//[1, 2, 3]
System.out.println(queue.poll());// 1
System.out.println(queue);//[2, 3]
System.out.println(queue.element());//2
/*
如果LinkedList当做栈去看,操作主要在head身上
在head的地方可以进行入栈和出栈
head ———————————————— rear
*/
LinkedList<Integer> stack = new LinkedList<Integer>();
stack.push(1);//1
stack.push(2);//2 1
stack.push(3);//3 2 1
System.out.println(stack);//[3, 2, 1]
System.out.println(stack.pop());
System.out.println(stack);//[2, 1]
System.out.println(stack.peek());//2
}
}

 

Vector

  • 简介
  • Vector 类可以实现可增长的对象数组。
  • 与数组一样,它包含可以使用整数索引进行访问的组件。

  • 此实现是同步的。(线程安全)

  • 一般被ArrayList替代,故不做详细介绍。

Stack

  • 简介
  • 是Vector的一个子类,表示的是栈。
  • 一般而言被LinkedList替代。
  • 常用方法
  • boolean empty() 测试堆栈是否为空。
  • E peek()  查看栈顶对象,但不移除。
  • E pop()  移除栈顶对象,并返回。
  • E push()  把项压入堆栈顶部。
  • 方法使用示例
public class StackDemo {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
System.out.println(stack);//[1,2,3,4]
System.out.println(stack.pop());//4
System.out.println(stack.peek());//3
System.out.println(stack);//[1,2,3]
}
}

 

最后

以上就是落后水杯为你收集整理的集合Collection——List接口List的全部内容,希望文章能够帮你解决集合Collection——List接口List所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部