写点什么

ArrayList 与 LinkedList 的方法及其区别

  • 2022 年 4 月 28 日
  • 本文字数:2321 字

    阅读完需:约 8 分钟


[](()一、聊聊 LinkedList



[](()1.LinkedList 的底层源码

public class LinkedList<E>


extends AbstractSequentialList<E>


implements List<E>, Deque<E>, Cloneable, java.io.Serializable


双链表实现了 List 和 Deque 接口。 实现所有可选列表操作,并允许所有元素(包括 null )。


所有的操作都能像双向列表一样。 索引到列表中的操作将从开始或结束遍历列表,以更接近指定的索引为准。

[](()2.LinkedList 的构造方法

  • LinkedList() 构造一个空列表。


  • LinkedList(Collection<? extends E> c) 构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。

[](()3.LinkedList 的常用方法

  • boolean add(E e) 将指定的元素追加到此列表的末尾


  • int size() 返回此列表中的元素数


  • E get(int index) 返回此列表中指定位置的元素


  • E remove(int index) 删除该列表中指定位置的元素


  • void addFirst(E e) 在该列表开头插入指定的元素


  • void addLast(E e) 将指定的元素追加到此列表的末尾


  • E getFirst() 返回此列表中的第一个元素


  • E getLast() 返回此列表中的最后一个元素


  • void push(E e) 将元素推送到由此列表表示的堆栈上


  • E pop() 从此列表表示的堆栈中弹出一个元素


测试代码:


public class LinkedListTest {


public static void main(String[] args) {


LinkedList<String> list = new LinkedList<String>();


// boolean add(E e) 将指定的元素追加到此列表的末尾。


list.add("aaa");


list.add("ddd");


list.add("ccc");


list.add("111");


list.add("aaa");


list.add("eee");


// int size() 返回此列表中的元素数


System.out.println(list.size()); // 6


System.out.println(list); // [aaa, ddd, ccc, 111, aaa, eee]


// E get(int index) 返回此列表中指定位置的元素。


System.out.println(list.get(0)); // aaa


System.out.println(list.get(list.size() - 1)); // eee


System.out.println("*****************************");


// E remove(int index) 删除该列表中指定位置的元素


System.out.println(list.remove(3)); // 111


System.out.println("*****************************");


// void addFirst(E e) 在该列表开头插入指定的元素


list.addFirst("111");


System.out.println(list); // [111, aaa, ddd, ccc, aaa, eee]


// void addLast(E e) 将指定的元素追加到此列表的末尾。


list.addLast("666");


System.out.println(list); // [111, aaa, ddd, ccc, aaa, eee, 666]


// E getFirst() 返回此列表中的第一个元素


System.out.println(list.getFirst()); // 111


// E getLast() 返回此列表中的最后一个元素。


System.out.println(list.getLast()); // 666


System.out.println("*****************************");


// void push(E e) 将元素推送到由此列表表示的堆栈上


list.push("888");


System.out.println(list); // [888, 111, aaa, ddd, ccc, aaa, eee, 666]


// E pop() 从此列表表示的堆栈中弹出一个元素


String pop = list.pop();


System.out.println(pop); // 888


System.out.printl 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 n("****************************");


for (int i = 0; i < list.size(); i++) {


System.out.println(list.get(i));


}


System.out.println("****************************");


Iterator<String> iterator = list.iterator();


while (iterator.hasNext()) {


System.out.println(iterator.next());


}


}


}


测试结果:


6


[aaa, ddd, ccc, 111, aaa, eee]


aaa


eee




111




[111, aaa, ddd, ccc, aaa, eee]


[111, aaa, ddd, ccc, aaa, eee, 666]


111


666




[888, 111, aaa, ddd, ccc, aaa, eee, 666]


888




111


aaa


ddd


ccc


aaa


eee


666




111


aaa


ddd


ccc


aaa


eee


666


[](()二、聊聊 ArrayList



[](()1. ArrayList 的底层源码

public class ArrayList<E> extends AbstractList<E>


implements List<E>, RandomAccess, Cloneable, java.io.Serializable


ArrayList 是从 JDK1.2 引入的。


它是可调整大小的数组,实现了 List 接口。 实现所有可选列表操作,并允许所有元素包括 null 。 除了实现 List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小。 (这个类是大致相当于 Vector,不同之处在于它是不同步的)。


内部封装一个数组,用数组来存储数据。内部数组的默认初始容量 10,存满后 1.5 倍增长


从 JDK1.8 开始, ArrayList 一开始创建一个长度为 0 的数组,当添加第一个元素时再创建一个始容量为 10 的 数组。

[](()2. ArrayList 的构造方法

  • ArrayList() 构造一个初始容量为十的空列表。


  • ArrayList(Collection<? extends E> c) 构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。


  • ArrayList(int initialCapacity) 构造具有指定初始容量的空列表。

[](()3. ArrayList 的常用方法

ArrayList 的方法和 LinkedList 相同,但它没有两端操作数据的方法


  • boolean add(E e) 将指定的元素追加到此列表的末尾


  • int size() 返回此列表中的元素个数


  • E get(int index) 返回此列表中指定位置的元素


  • E remove(int index) 删除该列表中指定位置的元素


  • boolean remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)


  • boolean contains(Object o) 如果此列表包含指定的元素,则返回 true


  • boolean addAll(int index, Collection<? extends E> c) 将指定集合中的所有元素插入到此列表中,从指定的位置开始


\- void clear() 从列表中删除所有元素


  • for / iterator 集合遍历


测试代码:

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
ArrayList 与 LinkedList 的方法及其区别_程序员_爱好编程进阶_InfoQ写作社区