为什么很多编程语言中数组都从0开始编号

  1. 定义

数组(array)是一种线性表数据结构。用一组连续的内存空间,来存储一组具有相同类型的数据。

  1. 如何实现随机访问
    1. 线性表(数据排成像一条线一样的结构)
    2. 连续的内存空间和相同类型的数据
  2. 寻址公式
a[i]_address = base_address + i * date_type_size
  1. 容器的优势,eg:ArrayList

将数组的操作细节封装起来,支持动态扩容(每次扩大为原来的1.5倍)。

注:由于扩容操作设计内存申请和数据搬移,比较耗时。若事先能确定需要存储的数据大小,最好在创建ArrayList的时候事先指定书大小

  1. 容器的劣势:

不能存储基本数据类型,若关注性能或希望使用基本数据类型,则选用数组

补充

位(bit) 字节(byte)

  1. 各数据类型所占用的字节数
数据类型所占用字节数
byte1
short2
int4
long8
float4
double8
char2

数组常用操作

    /**
     * 定义data保存数据
     */
    private int data[];
    /**
     * 定义数组实际长度
     */
    private int count;
    /**
     * 定义数组容量
     */
    private int capacity;

    public Array(int capacity) {
        this.data = new int[capacity];
        this.capacity = capacity;
        this.count = 0;
    }

    /**
     * 找数据
     *
     * @param index
     * @return
     */
    public int find(int index) {
        if (index < 0 || index >= count) {
            return -1;
        }
        return data[index];
    }

    /**
     * 加数据
     *
     * @param index
     * @param value
     * @return
     */
    public boolean insert(int index, int value) {
        if (index < 0 || index >= count) {
            return false;
        }
        if (count == capacity) {
            return false;
        }
        for (int i = count - 1; i < count; i--) {
            data[i + 1] = data[i];
        }
        data[index] = value;
        ++count;
        return true;
    }

    /**
     * 数据加到末尾
     *
     * @param value
     * @return
     */
    public boolean insertToTail(int value) {
        if (count == capacity) {
            return false;
        }
        data[count++] = value;
        return true;
    }

    /**
     * 删除指定位置数据
     *
     * @param index
     * @return
     */
    public boolean delete(int index) {
        if (index < 0 || index >= count) {
            return false;
        }
        for (int i = index + 1; i < count; i++) {
            data[i - 1] = data[i];
        }
        --count;
        return true;
    }

    /**
     * 打印此数组
     */
    public void printAll() {
        for (int i = 0; i < count; i++) {
            System.out.print(data[i] + " ");
        }
        System.out.println();
    }

    /**
     * 获得数组长度
     * @return
     */
    public int getCount(){
        return count;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值