Loading

JAVA数据结构--Array数组实现

所谓数组,是有序的元素序列。 [1]  若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。 [1]  这些无序排列的同类数据元素的集合称为数组。

  平常使用Java中的数组,数组是最基础的一种数据结构

int[] nums=new int[5];

  定义数组以及数组的构造函数如下

public class Array<E> {
    private E[] data;
    private int size;
    /*
    *
    * @param 传入数组的容量capacity构造array
    * */
    public Array(int capacity){
        data=(E[])new Object[capacity];
        size=0;
    }
    /*
    * 无参数的构造函数,默认数组的容量是capacity=10
    * */
    public Array(){
        this(10);
    }
}

  array数组的优点就在于,查询快,查询的时间复杂度为O(1)

//获取index索引位置的元素
    public E get(int index){
        if(index<0||index>=size)
            throw new IllegalArgumentException();
        return data[index];
    }
    //获取末尾元素
    public E getLast(){
        return data[size-1];
    }
    //获取头部元素
    public E getFirst(){
        return data[0];
    }

  同样,array数组的缺点就是插入的复杂度为O(n)

    //在第index位置插入一个新元素e
    public void add(int index,E e){
        if(size==data.length)
            throw new IllegalArgumentException();
        if(index<0||index>size)
            throw new IllegalArgumentException();
        for(int i=size-1;i>=index;i--)
            data[i+1]=data[i];
        data[index]=e;
        size++;
    }

  完整代码如下:

package Array;

public class Array<E> {
    private E[] data;
    private int size;
    /*
    *
    * @param 传入数组的容量capacity构造array
    * */
    public Array(int capacity){
        data=(E[])new Object[capacity];
        size=0;
    }
    /*
    * 无参数的构造函数,默认数组的容量是capacity=10
    * */
    public Array(){
        this(10);
    }
    //获取index索引位置的元素
    public E get(int index){
        if(index<0||index>=size)
            throw new IllegalArgumentException();
        return data[index];
    }
    //获取末尾元素
    public E getLast(){
        return data[size-1];
    }
    //获取头部元素
    public E getFirst(){
        return data[0];
    }
    //获取元素中的个数
    public int getSize(){
        return size;
    }
    //获取数组的容量
    public int getCapacity(){
        return data.length;
    }
    //返回数组是否为空
    public boolean isEmpty(){
        return size==0;
    }
    //末尾添加元素
    public void addLast(E e){
       add(size,e);
    }
    //头部添加元素
    public void addHeader(E e){
        add(0,e);
    }
    //修改元素
    public void change(int index,E e){
        if(index<0||index>=data.length)
            throw new IllegalArgumentException();
        data[index-1]=e;
    }
    //在第index位置插入一个新元素e
    public void add(int index,E e){
        if(size==data.length)
            throw new IllegalArgumentException();
        if(index<0||index>size)
            throw new IllegalArgumentException();
        for(int i=size-1;i>=index;i--)
            data[i+1]=data[i];
        data[index]=e;
        size++;
    }
    //查找数组中是否有元素e
    public boolean contains(E e){
        for(int i=0;i<size;i++)
            if(data[i].equals(e))
                return true;
        return false;
    }
    //查询元素的索引
    public int find(E e){
        for(int i=0;i<size;i++)
            if(data[i]==e)
                return i;
        return -1;
    }
    //从数组中删除元素
    public E remove(int index){
        if(index<0||index>=size)
            throw new IllegalArgumentException();
        E ret =data[index];
        for(int i=index+1;i<size;i++)
            data[i-1]=data[i];
        size--;
        return ret;
    }
    //删除头结点
    public E removeFirst(){
        return remove(0);
    }
    //删除尾节点
    public E removeLast(){
        return remove(size-1);
    }
    //删除元素
    public void removeElement(E e){
        int index=find(e);
        if(index!=-1)
            remove(index);
    }
    @Override
    public String toString(){
        StringBuilder res=new StringBuilder();
        res.append(String.format("Array:size=%d,capacity=%d\n",size,data.length));
        res.append('[');
        for(int i=0;i<size;i++){
            res.append(data[i]);
            if(i!=size-1)
                res.append(",");
        }
        res.append(']');
        return res.toString();
    }
}

  

posted @ 2018-12-10 20:37  xpang0  阅读(1274)  评论(0编辑  收藏  举报