数组

 

1.什么是数组?

           数组是一种线性的数据结构.它同一组连续的内存空间,来存储一组具有相同类型的数据结构

2.代码实现数组的增删改查的功能

/**
 * 数组实现增删改查的操作
 */
public class ArrayListDemo {
private Object[] elementData; private int size; public ArrayListDemo() { this(10); } public ArrayListDemo(int initCapacity) { if (initCapacity < 0) { throw new RuntimeException("参数输入确:" + initCapacity); } elementData = new Object[initCapacity]; } //判断容器的大小 public int size() { return size; } //判断容器是否为空 public boolean isEmpty() { return size == 0; } //判断添加的元素是否越界 private void rangeCheck(int index) { if (index >= size) throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); } private String outOfBoundsMsg(int index) { return "Index: " + index + ", Size: " + size; } //添加元素 public void add(Object data) { ensureCapacity(); elementData[size++] = data; } //扩容的操作 private void ensureCapacity(){ if (size == elementData.length) { Object[] newArray = new Object[size * 2]; System.arraycopy(elementData, 0, newArray, 0, elementData.length); elementData = newArray; } } //在某一个位置向容器中添加元素 public void add(int index,Object object){ rangeCheck(index); ensureCapacity(); System.arraycopy(elementData,index,elementData,index+1,size-index); elementData[index]=object; size++; } //修改某一索引下的元素 public void update(int index,Object object){ rangeCheck(index); elementData[index]=object; } //获得某一索引下的值 public Object get(int index) { rangeCheck(index); return elementData[index]; } //移除某一索引下的值 public void remove(int index){ rangeCheck(index); int numMove=size-index-1; if (numMove>0){ System.arraycopy(elementData,index+1,elementData,index,size-index-1); } elementData[-size]=null; } public void remove(Object object){ for (int i = 0; i <size ; i++) { if (elementData[i].equals(object)){ remove(i); } } } //遍历数组中所有元素的值 public void list(){ for (int i = 0; i <elementData.length ; i++) { System.out.println(elementData[i]); } }

3.数组和容器的联系和区别?

   数组和集合的相似点:都是可以存储多个对象,对外作为一个整体而存在。

   数组的缺点:长度必须在初始化的时候就确定了,数组采用的是连续的存储空间,添加和删除的效率低,不能实现动态的扩容操作。

4.Java底层容器能否完全替换数组?

(1).在Java中提供的容器类,ArrayList最大的优点就是可以将很多数组操作的细节封装起来,便于调用,另一个优点是支持动态扩容。

(2).数组本身在定义的时候预先指定了大小,因为需要分配连续的内存空间,如果我们分配了大小为10的数组,当第11个元素需要存储到数组当中时,我们需要重新分配一块更大的空间,将原来的数据复制过去,然后将新的数据插入。

(3).使用ArrayList,我们完全不需要关心底层的扩容逻辑,ArrayList 已经帮我们实现好了,存储空间不够的时候,会将空间自动扩容1.5倍的大小。

(4).ArrayList无法存储基本的数据类型,(8种基本数据类型),而是引用类型,所以基本数据类型,可以选用数组.

每天进步一丢丢

完成。

 

 

 

posted @ 2019-10-10 23:21  阿福聊编程  阅读(183)  评论(0编辑  收藏  举报