Java数据结构与算法(二)数组

Java数据结构与算法(二)数组

数组定义

在Java中,存储相同类型的一块(定长)连续内存空间。

特点:类型相同、连续空间、定长
延伸的一些特点:可重复、默认值为类型的默认值

数组的声明

int[] aa = new int[29];
int[] bb = new int[] {1,2,3};
String[] str = {"aaa","bbb","ccc","ddd"};

数组操作
成员变量

private Object[] elements = null;
private int size = 0;//已经添加到的位置

构造方法

public ArrayGo(int defaultCapacity) {
    elements = new Object[defaultCapacity];
}

添加数据
添加到最后

public int add(Object obj) {
    if(size == elements.length) {
        System.out.println("数组已经满了");
        return -1;
    }
    elements[addIndex++] = obj;
    return addIndex;
}

包含操作
返回第一匹配的数组下标

public int contains(Object obj) {
    if(obj == null) {
        throw new IllegalArgumentException("参数不能为空");
    }
    for(int i = 0;i<elements.length;i++) {
        if(elements[i].equals(obj)) {
            return i;
        }
    }
    return -1;
}

删除操作

public Object delete(int index) {
    if(index > size || index <0) {
        return -1;
    }
    Object result = elements[index];
    //我们就不用Arrays.copy了
    for(int i=index;i<size-1;i++) {
        elements[i] = elements[++i];//往前挪
    }
    elements[--size] = null;//最后一个元素设置为空
    return result;
}

数组倒置练手

public static void revise(int [] array) {
    if(array == null || array.length == 0) {
        return ;
    }
    System.out.print("before revise=");
    for(int k=0;k<array.length;k++) {
        System.out.print(array[k]+",");
    }
    System.out.println("------------");

    int i = 0;
    int j = array.length-1;
    while(i<j) {
        int tmp = array[j];
        array[j] = array[i];
        array[i] = tmp;
        i++;
        j--;
    }
    System.out.print("after revise=");
    for(int k=0;k<array.length;k++) {
        System.out.print(array[k]+",");
    }
}

拓展
我们稍加改动就能做成循环队列,可以考虑下如何实现。
就是在addIndex和takeIndex固定数组的长度就可以试下哈!!

总结:

1)数组没有方法,就是一块连续的定容的内存空间,不能自动扩容,我们可以使用ArrayList来替代它
2)按照下标的查询速度回很快,
3)按照对象是否存查询需要遍历整个数组,数据很大的时候查询速度不如hash快
4)对于删除操作需要将对删除后小标的数据往前移动,将最后一个置为空如果是delete(0)需要移动几乎真个数组的数据

简易版的就是这样子,没有扩容,没有考虑线程安全等等。

猜你喜欢

转载自blog.csdn.net/mayongzhan_csdn/article/details/81188436