Java数组

发布时间 2023-09-25 14:31:26作者: xiaoWang3486

Array

  1. java语言中数组是一种引用数据类型。不属于基本数据类型。数组的父类是object。
  2. 数组是一个容器,数组是一个数据的集合。
  3. 数组中可以储存基本数据类型的数据,也可以储存引用数据类型的数据。
  4. 数组是引用类型,所以数组对象储存在堆内存当中的。
  5. 数组当中储存的是Java对象的话,实际上存储的是对象的引用(内存地址),数组不能直接存储java对象。
  6. 数组一旦创建,在java中规定,长度是不可变的。
  7. 数组分类为一维数组二维数组,多维数组。
  8. 数组中所有的对象都有length属性,用来获取数组中元素的个数,
  9. Java中数组的数据类型都必须统一。
  10. 数组中第一个元素的内存地址就作为整个数组对象的内存地址。储存在栈内存中如21.
  11. 数组中的每一个元素都有下标,从0开始,递增。最后一个就是length-1.
  12. 数组的优点和缺点:

优点:查询、查找、检索某个下标上的元素的效率极高。

检索效率高的原因:

  1. 每一个元素的内存地址在空间存储上是连续的。
  2. 每一个元素类型相同,所以占用空间大小一样。
  3. 知道一个元素的内存地址,知道每个元素占用的空间大小,又知道下标,所以通过数学表达式就可以计算出某个元素的内存地址,直接通过内存地址定位元素,所以数组的检索效率是极高的。

缺点:

  1. 因为需要保证数组中每个元素的内存地址连续,在数组上随机删除或增加元素的时候,效率较低,因为随机增删会涉及其他元素的同意前移或后撤的操作。但是对于最后的一个元素的增删则不影响。

  2. 数组不能存储大数据量,因为在内存空间中很闹找到一块很大且连续的内存空间。

  3. 如何声明:

int[] array1;

double[] array2;

String[] array3;

Object[] array4;

  1. 如何初始化:包括静态初始化数组和动态初始化数组。

静态:

int[] array={10,20,30,11,58};

动态:

int[] array=new int(6); //这里6表示数组中的元素个数,且默认值都为0

String[] array=new String(8)//这里8表示数组元素个数,且默认都为null

c++风格:

int array[]={20,30,40,50};

  1. 什么时候使用静态,什么时候使用动态方式。

当确定数据内容时,用静态,当不确定时,用动态。

  1. 当一个方法的参数是数组,传参用的方法。

  2. main方法中的(String[] args)数组的作用是JVM传一个参数;或者给用户使用,用户可以在控制台上输入参数,这个参数会被自动转换为“String[] args”数组。然后JVM通过空格将这些参数分离,然后自动放到“String[] args”中。

  3. 对于数组来说只存储java对象的内存地址,数组中存储的是每个元素是“引用”。

  4. 数组中存储的数据类型是引用数据类型。

  5. 一维数组的扩容:先创建一个大容量的数组,然后再将小数组中的数据拷贝进去。拷贝使用System.arraycopy(五个参数)

  6. 数组拷贝的内存图:

二维数组

  1. 二维数组是一个特殊的一维数组,特殊在数组中的元素都为一维数组。
  2. 二维数组的格式:int[][] array

int[][] array={{1,2,3},{4,5,6},{7,8,9,},{7,4,1}};

int[][] array={

,

,

}

  1. 二维数组的静态初始化:

int[][] array={{1,2,3},{4,5,6},{7,8,9,},{7,4,1}};

int[][] array={

,

,

  1. 二维数组的动态初始化:

int[][] a=new int[3][4];

  1. 二维数组的读和改:

int[][] array={

,

,

}

int[]=array[0] //{1,2,3}

array[二维数组中的一维数组下标][一维数组中的元素下标]

System.out.println(array[0][1]) //第一个一维数组的第二个元素。

  1. 二维数组的改:

array[2][0]=5;

二分法查找

  1. 二分法查找算法基于排序的基础之上(没有排序无法查找)
  2. 二分法效率高于一个一个查找。
  3. 二分法也叫折中查询。

冒泡排序

  1. 从左到右依次比较,若a>b则a与b互换位置。
  2. 例如:int[] arr={9.4.5.8.7.1.2};

{4,9,5,8,7,1,2};

{4,5,9,8,7,1,2}

{4,5,8,9,7,1,2}

{4,5,8,7,9,1,2}

{4,5,8,7,1,9,2}

{4,5,8,7,1,2,9}

最终经过6次比较输出最大的9

{4,5,8,7,1,2,}

{4,5,8,7,1,2,}

{4.5.7,8,1,2,}

{4,5,7,1,8,2,}

{4,5,7,1,2,8}

最终经过3次比较输出最大的9

{4,5,7,1,2}

{4,5,7,1,2}

{4,5,1,7,2,}

{4,5,1,2,7}

最终经过4次比较输出最大的7

{4,5,1,2,}

{4,1,5,2,}

{4,1,2,5,}

最终经过3次比较输出最大的5

{1,4,2}

{1,2,4}

最终经过2次比较输出最大的4

{1,2}

最终经过1次比较输出最大的2

  1. 代码:

int[] arr={5,7,8,9,8};

for(int i=0;i<arr.length-1;i++){

if(arr[i]<arr[i+1]){

int a;

a=arr[i];

arr[i]=arr[i+1];

arr[i+1]=a;

}

\1.