首页 > 编程语言 >Java数组

Java数组

时间:2022-08-14 23:24:49浏览次数:46  
标签:Java int 元素 System 数组 new out

Java数组

一、数组声明创建

1、声明数组:

数组元素类型 数组名[]/[][]
数组元素类型 []/[][]数组名
为数组分配元素:
数组名=new 数组元素类型[数组元素个数]

2、声明和创建一起:

int 数组名[][]=new int[3][4]
表示 3个长度为4的一维数组

数组类型[] 数组名=new 数组元素类型[数组元素个数]

3、获取数组长度:

arrays.length

4、三种初始化

静态初始化
int[] a={1,2,3};
Man[] mans={new Man(1,1),new Man(2,2)} (引用类型)

动态初始化
int a=new int[2];
a[0]=1;
a[1]=2;

数组的默认初始化
数组数引用类型,它的元素相当于类的实例变量,因此数组元素也按照实例变量同样的方式被隐式初始化

二、数组的基本特点

其长度是确定的,一旦创建,长度不可以改变
其元素必须是相同类型
数组中的元素可是任何数据类型,包括基本类型和引用类型
数组变量属于引用类型,数组也可以看成对象,数组中的每个元素1可以看成对象的成员变量
数组本身就是对象,Java中对象是在堆中的,因此无论数组保存原始类型还是其他对象类型,数组对象本身是在堆中的

java内存分析

方法在栈,实例在堆。可以把栈当成书的目录,堆当作内容,位置就是页数。

java.lang.ArrayIndexOutOfBoundsException:10
表示数组下标越界异常

三、数组的使用

1、for-each循环

数组1

2、数组作方法入参

打印数组
数组2

3、数组作返回值

反转数组
这里的打印数组调用了reverse(),用到了反转数组和打印数组两种方法

四、二维数组

int a[][]=new int[2][5]
可以看成是2行5列的数组或者2个长度为5的一维数组
system.out.print(a[1])
这个输出的只是一维数组的地址值,如果要输出具体值的话,可以调用打印数组的方法
打印数组方法等同于Arrays.toString()
System.out.println(Arrays.toString(a)) 【用Arrays类里面的方法】

system.out.print(a[1][0])
这个就可以输出具体值

数组4

五、Arrays类

数组的工具类java.util.Arrays
Arrays类中的方法都是static修饰的静态方法,在使用的时候直接用类名调用,不需要用对象来调用

常用功能:
给数组赋值:通过fill方法
Arrays.fill(a,fromIndex:2,toIndex:4,val:0);填充的只有下标为2和3的,左闭右开

给数组排序:通过sort方法,按升序
比较数组:通过equals方法比较数组中的元素是否相等
查找数组元素:通过binarySearch方法能对以及排序好的数组进行二分查找法操作

六、冒泡排序(八大排序之一)

时间复杂度: n的平方

  • 比较数组中相邻的两个元素,如果第一个数比第二个数大,我们就交换他的顺序
  • 每一次比较都会产生一个最大或者最小
  • 下一轮排序可以少一次排序
  • 依次循环,直至结束

冒泡排序

如果数组已经有排序好的,可以进行优化,设立flag标识位,减少没必要的比较如下图
优化

七、稀疏数组

当一个数组中大部分元素为0,或者同一值的数组时可以用稀疏数组保存

稀疏数组的处理方式:
记录数组一共有几行几列,有多少个不同值
把具有不同值的元素和行列及值记录在一个小数组里

如下:左边是原始数组,右边是稀疏数组
例子

练习

该题是先创建一个二维数组,获取并输出二维数组,再计算二维数组的有效值个数;然后再创建稀疏数组,并将二维数组转化为稀疏数组输出;最后再创建一个新的二维数组,获取稀疏数组的值后还原数组

该题要注意一下,输出打印稀疏数组时有两种方法。可以用遍历数组的方法,两个for循环;也可以用一个循环

package com.an;

import java.util.Arrays;

public class HelloWorld {
public static void main(String[] args) {
//创建二维数组
int[][] a = new int[4][4];
a[2][1] = 1;
a[1][0] = 2;
//遍历二维数组
for (int[] ints : a) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
//转化为稀疏数组
//获取有效值个数
int sum = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] != 0) {
sum++;
}
}
}
System.out.println("稀疏数组有效值个数为:" + sum);
//创建稀疏数组
int[][] b = new int[sum + 1][3];
b[0][0] = 4;
b[0][1] = 4;
b[0][2] = sum;
int count = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (a[i][j] != 0) {
count++;
b[count][0] = i;
b[count][1] = j;
b[count][2] = a[i][j];
}
}
}
//输出稀疏数组
System.out.println("输出稀疏数组为:");
//方法一
/for (int[] bints : b) {
for (int bbints : bints) {
System.out.print(bbints + "\t");
}
System.out.println();
}
/
//方法二
for(int i=0;i<b.length;i++){
System.out.println(b [i][0]+"\t"+b [i][1]+"\t"+b [i][2]+"\t");
}
System.out.println();
//读取稀疏数组的值
int[][] c=new int[b [0][0]][b [0][1]];
//还原数组的值
for(int i=1;i< b.length;i++){
c [b [i][0]][b [i][1]]=b [i][2];
}
System.out.println("输出还原数组的值:");
for (int[] r : c) {
for (int i : r) {
System.out.print(i+"\t");
}
System.out.println();
}
}
}

标签:Java,int,元素,System,数组,new,out
From: https://www.cnblogs.com/ChenAiNan/p/16586668.html

相关文章

  • java实现大文件的拆分与合并
    前言我需要把一个大文件上传到网盘上,由于网盘禁止上传大于4G的文件,所以我想通过Java程序来把大文件分割为小文件后,再上传,等需要的时候,通过程序把文件进行合并即可。一、......
  • 从1到4选出不重复的3个数组成,能有多少种组合
    importitertoolsa=range(1,5)y=list(itertools.permutations(a,3))print(y)输出:[(1,2,3),(1,2,4),(1,3,2),(1,3,4),(1,4,2),(1,4,3),(2,......
  • javaSE的补充
    1instanceOf(1)用于比较两个对象是否相等XinstanceOfY用于比较X,Y是否存在父子关系(2)子类转换为父类,可能为丢失子类自己独自拥有的方法2Static修饰符的补充理解......
  • java12 - 封装+继承+多态
    封装该露的露,该藏的藏我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。封装(数据......
  • Java特性和优势
    Java特性和优势简单性面向对象可移植性(WriteOnce,RunAnywhere)高性能分布式动态性(反射)多线程安全性(异常机制,捕获异常)健壮性Java的三大版本JavaSE:标准版(桌面......
  • Java一次计算简易计算器
    小白简易计算器第一次尝试写代码publicclassCalculator{publicstaticvoidmain(String[]args){//创建扫描对象Scannerscanner=newS......
  • 《Effective Java》第54条:返回零长度的数组或者集合,而不是null
    《EffectiveJava》第54条:返回零长度的数组或者集合,而不是null一、问题如果一个方法返回类型是list,如果结果为空的情况下返回null的情况并不少见,如下:publicclassShop_......
  • Java Script了解
    JavaScript了解诞生于1995年LiveScript更名为JavaScript(Netscape(网景公司)出品)JavaScript的概述JavaScript是一个轻量级的语句,他是单线程的语言(一个线程解析);他是一......
  • JavaScript关于cookie
        1.http和httpshttp,https都是网络传输协议是用于网络相关传输,http走的是明文传输,https走的密文传输(内部采用对称加密以及非对称加密)。对应的https安全性......
  • 数组
    数据结构数据的结构(逻辑结构存储结构算法)存储结构(数据存储的结构方式)**线性结构数组(顺序表)队列栈堆链表非线性结构树图hash(散列表)只要是能存储数据的容器,必......