• 【数据结构】ArrayList与顺序表


    目录

    1.List是什么

    2.线性表

    3.顺序表

    3.1接口的实现

    4.ArrayList简介

    4.ArrayList的使用

      4.1构造方法

    4.2ArrayList的一些常见操作

    4.3 ArrayList的遍历



       本章内容我们将详细介绍Arraylist相关以及顺序表的使用,ArrayList实现了List接口。

    1.List是什么

       在集合框架中,List是一个接口,继承自Collection。Collection也是一个接口,

    该接口规范了后续容器中常用的一些方法,具体如下所示:

    Iterable也是一个接口,表示该接口的类是可以逐个元素进行遍历的,具体如下:

    站在数据结构的角度来看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作。

    List接口也提供了很多方法,具体如下:

    虽然提供了很多的方法,但是经常使用的方法是以下这些:

    方法解释
    boolean add(E e)尾插 e
    void add(int index, E element)将 e 插入到 index 位置
    boolean addAll(Collection c)尾插 c 中的元素
    E remove(int index)删除 index 位置元素
    boolean remove(Object o)删除遇到的第一个 o
    E get(int index)获取下标 index 位置元素
    E set(int index, E element)将下标 index 位置元素设置为 element
    void clear()清空
    boolean contains(Object o)判断 o 是否在线性表中
    int indexOf(Object o)返回第一个 o 所在下标
    int lastIndexOf(Object o)返回最后一个 o 的下标
    List subList(int fromIndex, int toIndex)

    截取部分 list

    注:List是一个接口,并不能直接实例化。如果要使用,必须要去实例化List的实现类,在集合框架中,ArrayList和LinkedList实现了List接口。


    2.线性表

      线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列...
    线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

    3.顺序表

       顺序表是一段物理地址连续的存储单元依次存储数据元素的线性结构,一般采用数组存储,在数组上面完成增删改查。

    3.1接口的实现

      我们可以自己通过数组来自定义一个顺序表。以下是个人写的关于顺序表的各种方法:

    1. import java.util.Arrays;
    2. public class SeqList {
    3. private int[] tmie;
    4. private int size;
    5. //构造方法
    6. public SeqList(){
    7. tmie=new int[10];
    8. }
    9. //默认插入到数组后面的位置
    10. public void add(int date){
    11. tmie[size]=date;
    12. size++;
    13. }
    14. //打印
    15. public void disPlay(){
    16. StringBuffer ret= new StringBuffer("{");
    17. //System.out.print(ret);
    18. for (int i = 0; i < size; i++) {
    19. ret.append(tmie[i]);
    20. if(i1){
    21. ret.append(",");
    22. }
    23. }
    24. ret.append("}");
    25. System.out.println(ret);
    26. }
    27. //在指定位置插入元素
    28. public void add(int pos, int data) {
    29. for (int i = pos; i 1 ; i++) {
    30. tmie[pos+1]=tmie[pos];
    31. }
    32. for (int i = pos; i
    33. tmie[pos]=data;
    34. }
    35. size++;
    36. }
    37. // 判定是否包含某个元素
    38. public boolean contains(int toFind) {
    39. for (int i = 0; i < size; i++) {
    40. if(tmie[i]==toFind){
    41. return true;
    42. }
    43. }
    44. return false;
    45. }
    46. // 获取 pos 位置的元素
    47. public int get(int pos) {
    48. for (int i = 0; i < size; i++) {
    49. if(tmie[i]==pos){
    50. return i;
    51. }
    52. }
    53. return -1;
    54. }
    55. // 给 pos 位置的元素设为 value
    56. public void set(int pos, int value) {
    57. tmie[pos]=value;
    58. }
    59. //删除第一次出现的关键字key
    60. public void remove(int toRemove) {
    61. int a=get(toRemove);
    62. for (int i = a; i 1 ; i++) {
    63. tmie[i]=tmie[i+1];
    64. }
    65. size--;
    66. }
    67. // 清空顺序表
    68. public void clear() {
    69. size=0;
    70. }
    71. }

    4.ArrayList简介

    在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架如下:

    [说明]

    1.ArrayList 是以泛型方法实现的,使用时必须要先实例化。

    2。ArrayList实现了RandomAccess接口,表明它支持随机访问。

    3.ArrayList实现了Cloneable接口,表明它是可以clone的。

    4.ArrayList实现了Serializable接口,表妹它是支持序列化的。

    5.它的底层是一段连续的空间,并且可以多态扩容,是一个多态类型的顺序表。

    4.ArrayList的使用

      4.1构造方法

    方法解释
    ArrayList()无参构造
    ArrayList(Collection c)利用其他 Collection 构建 ArrayList
    ArrayList(int initialCapacity)指定顺序表初始容量
    1. public class Test {
    2. public static void main(String[] args) {
    3. //初始就给了ArrayList一个初始空间
    4. ArrayList arrayList1=new ArrayList<>(2);
    5. //使用其它Collection创建
    6. List arrayList2=new ArrayList<>();
    7. //无参构造
    8. ArrayList arrayList3=new ArrayList<>();
    9. }
    10. }

    4.2ArrayList的一些常见操作

    ArrayList提供的方法很多,我们着重介绍一些常用的方法;

    方法解释
    boolean add(E e)尾插 e
    void add(int index, E element)将 e 插入到 index 位置
    boolean addAll(Collection c)尾插 c 中的元素
    E remove(int index)删除 index 位置元素
    boolean remove(Object o)删除遇到的第一个 o
    E get(int index)获取下标 index 位置元素
    E set(int index, E element)将下标 index 位置元素设置为 element
    void clear()清空
    boolean contains(Object o)判断 o 是否在线性表中
    int indexOf(Object o)返回第一个 o 所在下标
    int lastIndexOf(Object o)返回最后一个 o 的下标
    List subList(int fromIndex, int toIndex)截取部分 list

    4.3 ArrayList的遍历

    ArrayList 可以使用三方方式遍历:for循环+下标、foreach、使用迭代器

    1. public static void main(String[] args) {
    2. List list = new ArrayList<>();
    3. list.add(1);
    4. list.add(2);
    5. list.add(3);
    6. list.add(4);
    7. //使用for循环遍历
    8. for (int i = 0; i < list.size(); i++) {
    9. System.out.print(list.get(i)+ " ");
    10. }
    11. System.out.println();
    12. //使用foreach
    13. for (int x:list){
    14. System.out.print(x+ " ");
    15. }
    16. System.out.println();
    17. //使用迭代器
    18. Iterator it = list.listIterator();
    19. while (it.hasNext()){
    20. System.out.print(it.next() +" ");
    21. }
    22. }

    注意:
    1. ArrayList最长使用的遍历方式是:for循环+下标 以及 foreach
    2. 迭代器是设计模式的一种。
     

      

  • 相关阅读:
    【云原生kubernetes从入门到实践系列教程 ] 四.docker volumes持久化
    K8S使用开源CEPH作为后端StorageClass
    想考PMP,符合报名条件么?怎么报考?
    博士招生 | 美国UCF Dr.Qian Lou招收机器学习方向全奖博士生
    JavaScript【Text 节点、Node 节点属性(nodeName、nodeValue 、textContent、nextSibling、previousSibling)】(十二)
    Wireshark TS | 二谈 TCP 握手异常问题
    简述事务隔离级别
    Docker部署clickhouse
    图像处理之图像的几何变换
    防止 SQL 注入的 PHP MySQLi 准备语句教程
  • 原文地址:https://blog.csdn.net/weixin_64173948/article/details/132671912