美文网首页
动态数组--java

动态数组--java

作者: 不死鸟F21 | 来源:发表于2022-01-17 15:47 被阅读0次
public class AnyArray<E> {

    private E[]data;
    private int size;
    //构造函数
    public AnyArray(int cap){
        data = (E[]) new Object[cap];
        size = 0;
    }
    public AnyArray(){
        this(10);
    }
    public int getCap(){
        return data.length;
    }
    public int getSize(){
        return size;
    }
    public boolean inEmpty(){
        return size ==0;
    }
    public void addLast(E e){
//        if (size==data.length)
//            throw  new IllegalArgumentException("full....");
//        data[size] = e;
//        size++;
        add(size,e);
    }
    public void addFirst(E e){
        add(0,e);
    }

    public void  add(int pos,E e){

        if (pos<0|| pos>size)
            throw  new IllegalArgumentException("add failed, pos Error.");

        if (size==data.length)
            resize(data.length*2);

        for (int index=size-1;index>=pos;index--){
            data[index+1] =data[index]; //后移
        }
        data[pos] = e;
        size++;

    }
    public void modify(int pos,E e){
        if (pos<0 || pos>size)
            throw new IllegalArgumentException("modfiy failed, Pos Error");
        data[pos] = e ;
    }
    public E get(int pos){
        if (pos<0 || pos>size)
            throw new IllegalArgumentException("get failed, Pos Error");
        return data[pos];
    }
    public void set(int pos, E e){
        if (pos<0 || pos>size)
            throw new IllegalArgumentException("set failed, Pos Error");
        data[pos] = e;
    }
    public int find(E e){
        for (int i=0;i<size;i++){
            if (data[i] ==e)
                return i;
        }
        return -1;
    }
    public E  remove(int pos){
        if (pos<0 || pos>=size)
            throw new IllegalArgumentException("remove failed, Pos Error");
        E pos_data = data[pos];

        for (int i=pos+1;i<size;i++){
            data[i-1]=data[i];
        }
        size--;
        if (size == data.length /4 && data.length/2 !=0){
            System.out.println("-- resize.....");
            resize(data.length/2);
        }
        return pos_data;
    }
    public E removeFirst(){
        return remove(0);
    }
    public void removeElement(E e){
        int index = find(e);
        if (index !=-1){
            remove(index);
        }
    }
    public E removeLast(){
        return remove(size-1);
    }
    public void print(){
        for (E e :data){
            System.out.println(e);
        }
    }
    public String toString(){
        StringBuilder res = new StringBuilder();
        res.append(String.format("Array size is %s, Cap is %s\n",size,getCap()));
        res.append("[");
        for (int i=0; i<size ; i++){
            res.append(data[i]);
            if (i!=size-1)
                res.append(", ");
        }
        res.append("]");
        return res.toString();

    }

    private void resize(int newCap){
        if (newCap ==0)
            return;
        System.out.println("resize......");
        E[] newData = (E[]) new Object[newCap];
        for (int i=0;i<size;i++)
            newData[i] = data[i];
        data = newData;
    }

}

相关文章

  • ArrayList源码解析

    ArrayList简介 ArrayList底层是数组队列,相当于动态数组。与java中的数组相比,它的长度能动态增...

  • 动态数组--java

  • 基于动态数组的实现 Java实现 基于链表的栈的实现 Java实现

  • Java学习之数组

    标签: java 数组 声明数组语法: 声明并开辟数组: 数组的数据类型 数组是引用类型。 动态初始化数组 先开辟...

  • Java Array和Arrays的区别总结

    1. 数组Array属于Java.lang Java中最基本的一个存储结构。提供了动态创建和访问Java数组的方法...

  • ArrayList简介

    ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元...

  • 数组,栈,队列,链表

    数组 1:什么是数组?2:Java中数组的声明及数组的遍历3:数组天生的优势——索引4:动态数组5:封装自己的数组...

  • ArrayList 的实现原理

    ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于Abst...

  • Java基础day08ArrayList和继承

    ArrayList 类 对象数组 数组长度是固定, 无动态扩容 java.util.ArrayList 集合类,更...

  • ArrayList 你真的了解吗?

    ArrayList简介 ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量...

网友评论

      本文标题:动态数组--java

      本文链接:https://www.haomeiwen.com/subject/iuvchrtx.html