【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro

看到这句话的时候证明:此刻你我都在努力
加油陌生人
微信图片编辑_20240229212205.png


前言

今天给大家带来一篇有关Java顺序表和链表的文章,顺序表和链表我之前的专栏也是写过的,是用C语言实现的,也是模仿实现了顺序表和链表里的方法了。
下面是传送门:
顺序表:
你真的了解线性表中的顺序表了吗?(静态与动态顺序)-CSDN博客
链表:
数据结构对链表的初步认识(一)-CSDN博客
数据结构的带头,双向,循环链表来咯-CSDN博客
但是呢,学习了新语言Java那么就在用新语言在巩固一下了。


认识List

Java中的Listjava.util包下的一个接口,它是Collection接口的一个子接口,表示一个有序的集合,可以包含重复的元素。List接口提供了一些独特的方法来插入、访问、删除元素以及搜索列表中的元素。以下是List接口的一些关键特性和常用实现:

特性
  1. 有序性List中的元素按照添加的顺序进行排序。
  2. 允许重复:可以包含重复的元素。
  3. 动态数组:大多数List实现(如ArrayList)使用动态数组来存储元素,这使得随机访问非常高效。
常用方法
  • add(E e):向列表末尾添加一个元素。
  • add(int index, E element):在指定位置插入一个元素。
  • remove(int index):移除指定位置的元素并返回被移除的元素。
  • remove(Object o):移除列表中第一次出现的指定元素。
  • get(int index):返回指定位置的元素。
  • set(int index, E element):用指定元素替换列表中指定位置的元素。
  • size():返回列表中的元素数量。
  • indexOf(Object o):返回第一次出现的指定元素的索引。
  • lastIndexOf(Object o):返回最后一次出现的指定元素的索引。
  • clear():移除列表中的所有元素。
常用实现
  1. ArrayList:基于动态数组实现,支持快速随机访问。但插入和删除操作可能需要数组复制,效率较低。
  2. LinkedList:基于双向链表实现,适合频繁的插入和删除操作。但随机访问效率较低。
  3. Vector:和ArrayList类似,但它是同步的。
  4. Stack:继承自Vector,实现栈的功能,后进先出(LIFO)。
  5. CopyOnWriteArrayList:线程安全的变体,在读多写少的场景下性能较好。
泛型

从Java 5开始,List接口支持泛型,允许开发者指定列表中元素的类型,提高类型安全。

使用场景
  • 当你需要有序集合并且频繁进行随机访问时,选择ArrayList
  • 当你需要频繁在列表中插入或删除元素,并且对随机访问的需求不高时,选择LinkedList
注意事项
  • List的实现不是线程安全的。如果需要线程安全,可以使用Collections.synchronizedList()方法或CopyOnWriteArrayList
  • 选择合适的List实现对于性能至关重要,因为不同的实现在不同的操作下表现不同。</