zoukankan      html  css  js  c++  java
  • 数据结构之线性顺序表ArrayList(Java实现)

    一、ListMe接口:

    import java.util.ArrayList;

    //实现线性表(顺序表和链表)的接口:
    //提供add get isEmpty size 功能
    public interface ListMe<E> {
    //返回线性表大小:线性表元素个数,非底层数组长度
    public int size();

    //添加元素,追加在线性表最后
    public void add(E e);

    //(方法重载)添加元素,追加在线性表的index下标位置(插入)
    public void add(E e, int index);

    //返回线性表index位置的元素
    public E get(int index);

    //判断线性表是否为空;(非数组长度而是线性表元素个数是否为0)
    public boolean isEmpty();

    //窥视底层数组长度变化
    public void getElementData();
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    二、ArrayLisMe实现:

    import java.util.Arrays;

    //线性顺序表的实现
    public class ArrayListMe<E> implements ListMe<E>{
    //创建存储线性表的数组
    E[] elementData;

    //创建线性顺序表的大小(元素个数初始化)
    private int size;

    //空参构造器,调用下面的构造器,默认设置5个初始化数组长度
    public ArrayListMe(){
    this(5);
    }

    //在构造器中创建数组对象,并根据给定值分配初始空间
    public ArrayListMe(int length) {
    this.elementData=(E[])new Object[length];
    }

    @Override
    public int size() {
    //返回元素个数
    return size;
    }
    //动态更新线性表储存容量,即底层数组大小(增加原来数组长度的一半大小)
    public void grow(){
    if(size==elementData.length)
    elementData=Arrays.copyOf(elementData,elementData.length+(elementData.length>>1));
    }
    @Override
    public void add(E e) {
    //判断是否需要动态增加长度
    grow();
    //添加在顺序线性表最后面
    elementData[size++]=e;
    }

    @Override
    public void add(E e, int index) {
    //判断是否需要动态增加长度
    grow();

    //移动元素
    for(int i=size;i>index;i--){
    elementData[i]=elementData[i-1];
    }

    //添加元素
    elementData[index]=e;
    }

    //判断是否指定index位置会造成下标越界(抛异常)
    public void indexException(int index){
    if(index<0 || index>=size)
    throw new RuntimeException("顺序表越界");
    }

    @Override
    public E get(int index) {

    indexException(index);

    return elementData[index];
    }

    @Override
    public boolean isEmpty() {
    //判断线性顺序表是否为空(无元素)
    return size==0;
    }

    //显示线性顺序表所有元素
    @Override
    public String toString() {
    StringBuilder sb=new StringBuilder("[");

    for(int i=0;i<size;i++){
    if(i!=size-1)
    sb.append(elementData[i]+",");
    else
    sb.append(elementData[i]+"]");
    }
    return sb.toString();
    }

    public void getElementData(){
    //窥视底层数组长度变化
    System.out.println("底层数组长度:"+elementData.length);
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    三、测试类:

    public class TestArrayListMe {
    //测试
    public static void main(String s[]){
    ListMe<Integer> listMe=new ArrayListMe<Integer>();

    System.out.println(listMe.isEmpty());

    listMe.add(0);
    listMe.add(1);
    listMe.add(2);
    listMe.add(3);
    listMe.add(4);

    System.out.println(listMe.isEmpty());

    listMe.get(4);

    System.out.println("顺序表元素个数:"+listMe.size());

    listMe.getElementData();

    System.out.println(listMe.toString());

    // listMe.get(5);

    listMe.add(5);

    System.out.println("顺序表元素个数:"+listMe.size());

    listMe.getElementData(http://www.my516.com);

    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33

    ---------------------

  • 相关阅读:
    ubuntu系统安装初始化脚本
    21_多线程
    20_IO
    19_异常
    18_集合
    17_内部类和常用类
    16_接口
    15_abstract,static,final
    14_面向对象
    13_数组
  • 原文地址:https://www.cnblogs.com/ly570/p/11084007.html
Copyright © 2011-2022 走看看