首页 > 编程语言 >Java数组

Java数组

时间:2023-09-25 14:33:27浏览次数:42  
标签:Java int 元素 数据类型 数组 array 内存地址

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.

标签:Java,int,元素,数据类型,数组,array,内存地址
From: https://www.cnblogs.com/xiaoWang3486/p/17727874.html

相关文章

  • 数组1
    数组声明创建首先必须声明数组变量,才能在程序中使用数组,下面是声明数组变量的语法: dataType[]arrayRefVar; //首选的方法dataTypearrayRefVar[];//效果相同,但不是首选方法 array/əˈreɪ/n.一系列,大量;数组,阵列;盛装 data/ˈdeɪtə/n.数据,资料typ......
  • Java SE 21 新增特性
    JavaSE21新增特性作者:Grey原文地址:博客园:JavaSE21新增特性CSDN:JavaSE21新增特性源码源仓库:Github:java_new_features镜像仓库:GitCode:java_new_featuresRecordPatterns该功能首次在JavaSE19中预览,在JavaSE20中发布第二次预览版,在此版本中成为永久性功......
  • 数组
    数组声明创建首先必须声明数组变量,才能在程序中使用数组,下面是声明数组变量的语法:dataType[]arrayRefVar;//首选的方法dataTypearrayRefVar[];//效果相同,但不是首选方法array/əˈreɪ/n.一系列,大量;数组,阵列;盛装data/ˈdeɪtə/n.数据,资料type/......
  • 使用Intellij Idea打包java为可执行jar包
    自己在实际工作中的需要,使用Idea打包项目为可执行的jar包,网上找了好多文章但总是不成功,多次尝试后终于跑通,所以记录下来,希望可以帮助各位步骤:1.选中Java项目工程名称,在菜单中选择 File->projectstructure... (快捷键Ctrl+Alt+Shift+S)。2.在弹出的窗口中左侧选中"Artifact......
  • java读取resouces目录下文件
    resources中存放一些个资源文件,比如properties文件等,编译好会自动将这里边的文件复制到target/classes里去。获取资源文件的方法说明:XXX.class.getResourceAsStream()返回的是inputstreamXXX.class.getResource("/")返回URL,是classpath的位置XXX.class.getClassLoader().getRes......
  • java中mysql索引过多导致查询的时间不稳定
    在Java中,MySQL索引过多可能导致查询时间不稳定的情况确实存在。尽管索引可以加速查询,但是索引也会带来额外的维护成本和存储开销。当数据库表中存在过多的索引时,可能会导致以下几个问题:查询优化器选择困难:当有多个索引可供选择时,查询优化器需要评估每个索引的成本和选择最佳的索引......
  • Java内存模型——基础
    JMM因何产生由于计算机的存储设备与处理器的运算能力之间有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲——将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回......
  • 运行时数据区——Java堆
    Java程序在运行时创建的所有类实例或数组都放在同一个堆中。一个Java虚拟机实例中只存在一个堆空间,因此所有线程都将共享这个堆,它在虚拟机启动时创建。又由于一个Java程序独占一个Java虚拟机实例,因而每个Java程序都有它自己的堆空间——它们不会彼此干预。但是同一个Java程序......
  • Java虚拟机的简介
    Java虚拟机的生命周期一个运行时的Java虚拟机负责运行一个Java程序。Java虚拟机的主要任务是加载class文件并且执行其中的字节码。Java虚拟机包含一个类装载器(classloader)。它可以从程序和API中加载class文件。JavaAPI中只有程序执行时需要的部些类才会被装载。当启动一个......
  • java数据类型
    Java虚拟机中,数据装型及其运算都是由Java虚拟机规范严格定义的。数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位......