地址连续
直接通过下标获取数组里的内容:数组的下标从0开始
默认值: int 0 char 空 false 0.0 string null
用 java 写数组(定义、输出):
数组的长度不可变
可变数组 List ArrayList : new ArrayList<>();
数组扩容:
数组长度不够时,重新创建有个比原数组更长的数组brr,把原数组arr当中的数据全部复制到新数组当中
arr指向brr ,arr原来指向的就会被系统回收掉(Java有自动回收机制)
public class Test { public static void main(String[] args) { //创建数组 int[] arr = {5,20,55}; int[] brr = new int[arr.length+1]; for(int i = 0;i<arr.length;i++) { brr[i] = arr[i]; } arr = brr; arr[3] = 50; System.out.println(Arrays.toString(arr)); } }
自建ArrayList
- ArrayList.java:
package 数组;
public class ArrayList {
//全局变量 int size = 0;//记录有效数据的个数 int capacity = 10;//数组容量 double factor = 1.5;//因数1.5 int[] arr = new int[capacity];
/* int[] arr;
int size;//记录有效数据的个数
int capacity;//数组容量
double factor;//因数1.5
//构造方法 public ArrayList() { size = 0; capacity = 10; factor = 1.5; arr = new int[capacity]; }*/ public void add(int element) { if(size==capacity) { //数组满了,满了扩容 //强制转换成int类型的数据 capacity = (int) (capacity*factor); int[] brr = new int[capacity]; for(int i=0;i<arr.length;i++) { brr[i] = arr[i]; } arr = brr; } //没有满 arr[size] = element; size++; } //打印 public String toString() { String res = "["; //为了使打印出有效数据,后面一些默认数据0之类的不要 for(int i=0;i<size;i++) { //最后一个数据 if(i==size-1) { res+=arr[i]; } else { res+=arr[i]+","; } } res+="]"; return res; }
}
- 模拟ArrayList.java:
package 数组;
public class 模拟ArrayList {
public static void main(String[] args) { //new一个对象出来,list是对象 ArrayList list = new ArrayList(); list.add(1); list.add(3); list.add(3); list.add(4); list.add(5); list.add(6); list.add(6); list.add(2); list.add(1); list.add(9); list.add(6); list.add(3); //有自己的toString方法,调用自己的 System.out.println(list.toString()); //所有打印默认调用的都是toString方法(自己的) System.out.println(list); }
}
数组的增删改查
最后位置插入:
插入之前判断数组当中有没有位置:判断size和数组的长度是否相等
- 不相等则插入,说明有位置
size刚好就是需要插入的位置,有一个数据的话,size=1,插入数据的话应该插入下表为1的位置
arr[size] = num;
size++
- 相等则满了,需要扩容
指定位置插入:
1、判断插入的位置是否合法【0,size】
2、判断数组当中有没有位置:判断size和数组的长度是否相等,相等则满了,需要扩容
3、eg:在下标为2的位置插入数据
把原数据想要插入的位置及其之后的数据,按照从后往前的顺序 依次向后移动一位
4、数据移动完成之后,原来的数据不怕被覆盖掉,写入数据
size++
有序数组的插入:
1、判断数组当中有没有位置:判断size和数组的长度是否相等,相等则满了,需要扩容
2、记录第一个比目标数值大的数据所在的位置
3、把原数据想要插入的位置及其之后的数据,按照从后往前的顺序 依次向后移动一位
4、数据移动完成之后,原来的数据不怕被覆盖掉,写入数据
size++
删除:
把数据覆盖掉,size-1
删除第一个符合条件的数据:
1、从前往后遍历,找到要删除的元素,记录其所在的位置 position
2、position之后的数据 按照从前往后的数据 依次向前覆盖
size--
3、结束,不再查找
eg:删除100
删除所有符合条件的数据:
1、从后往前遍历,找到要删除的元素,记录其所在的位置 position
2、position之后的数据 按照从前往后的数据 依次向前覆盖
size--
3、继续向前查找,直到遍历完全部的数据
改
直接拿下标进行修改arr[2]=100