数组的三种方式总结多维数组的遍历及arrays类的常用方法总结(代码片段)

mengta mengta     2022-11-30     189

关键词:

一.数组的三种方式总结

   1.创建数组

Java语言使用new操作符来创建数组,语法如下:

arrayRefVar = new dataType[arraySize];

上面的语法语句做了两件事:

    • 一、使用 dataType[arraySize] 创建了一个数组。
    • 二、把新创建的数组的引用赋值给变量 arrayRefVar。

数组变量的声明,和创建数组可以用一条语句完成,如下所示:

dataType[] arrayRefVar = new dataType[arraySize];

另外,你还可以使用如下的方式创建数组。

dataType[] arrayRefVar = value0, value1, ..., valuek;

数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 到 arrayRefVar.length-1。

 

    技术图片  

  2.处理数组

     数组的元素类型和数组的大小都是确定的,所以当处理数组元素时候,我们通常使用基本循环或者 For-Each 循环。

       示例 

        技术图片  

For-Each 循环

JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组

 

3.多维数组

多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组,例如:

 

String str[][] = new String[3][4];

 

多维数组的动态初始化(以二维数组为例)

 

1. 直接为每一维分配空间,格式如下:

 

type[][] typeName = new type[typeLength1][typeLength2];

 

type 可以为基本数据类型和复合数据类型,arraylenght1 和 arraylenght2 必须为正整数,arraylenght1 为行数,arraylenght2 为列数。

 

例如:

 

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

 

解析:

 

二维数组 a 可以看成一个两行三列的数组。

 

2. 从最高维开始,分别为每一维分配空间,例如:

 

String s[][] = new String[2][];
s[0] = new String[2];
s[1] = new String[3];
s[0][0] = new String("Good");
s[0][1] = new String("Luck");
s[1][0] = new String("to");
s[1][1] = new String("you");
s[1][2] = new String("!");

 

解析:

 

s[0]=new String[2] 和 s[1]=new String[3] 是为最高维分配引用空间,也就是为最高维限制其能保存数据的最长的长度,然后再为其每个数组元素单独分配空间 s0=new String("Good") 等操作。

 

多维数组的引用(以二维数组为例)

 

对二维数组中的每个元素,引用方式为 arrayName[index1][index2],例如:

             num[1][0];

二.多维数组的遍历

数组是Java中的一种容器对象,它拥有多个单一类型的值。当数组被创建的时候数组长度就已经确定了。在创建之后,其长度是固定的。下面是一个长度为10的数组:

public class ArrayDemo 
	private int arraySize=10;
	public int[] arrayOfIntegers = new int[arraySize];

上面的代码是一维数组的例子。换句话说,数组长度只能在一个方向上增长。很多时候我们需要数组在多个维度上增长。这种数组我们称之为多维数组。为简单起见,我们将它称为2维数组。当我们需要一个矩阵或者X-Y坐标系的时候,二维数组是非常有用的。下面就是一个二维数组的例子:

public class TheProblemOf2DArray 
	private static final int ARR_SIZE=10;
	public static void main(String[] args) 
		int arr[][]=new int[ARR_SIZE][ARR_SIZE];
	

然而,可能让Java开发者们感到惊讶的是,Java实际上并没有二维数组。

在一个真正的数组中,所有的元素在内存中都存放在连续的内存块中,但是在Java的二维数组并不是这样。Java中所有一维数组中的元素占据了相邻的内存位置,因此是一个真正的数组。

在Java中,当我们定义:

int singleElement // 表示一个int变量
int[] singleDArray // 表示一个int变量数组(一维)
int[][] twoDArray // 表示一个int变量数组的数组(二维)

这意味着,在上面的例子中,二维数组是一个数组的引用,其每一个元素都是另一个int数组的引用。

这张图片清楚地解释了这个概念。

由于二维数组分散在存储器中,所以对性能有一些影响。为了分析这种差异,我写了一个简单的Java程序,显示遍历顺序的重要性

package arrayTraverse;
/**
 * 二维数组的问题
 * 
 * 我们在初始化一个任意大小的2维数组。(为简化分析我们使用二维方阵)我们将用两种不同方式迭代同一个数组,分析结果
 * 两种迭代方式的性能差距很大
 * @author mohit
 *
 */
public class TheProblemOf2DArray 
    //数组大小:数组越大,性能差距越明显
    private static final int ARR_SIZE=9999;
    public static void main(String[] args) 
        //新数组
        int arr[][]=new int[ARR_SIZE][ARR_SIZE];
        long currTime=System.currentTimeMillis();
        colMajor(arr); 
        System.out.println("Total time in colMajor : "+(System.currentTimeMillis()-currTime)+" ms");
        //新数组,与arr完全相同
        int arr1[][]=new int[ARR_SIZE][ARR_SIZE];
        currTime=System.currentTimeMillis();
        rowMajor(arr1); // this is the only difference in above
        System.out.println("Total time in col : "+(System.currentTimeMillis()-currTime) +" ms");
    

    /**
     * 下面的代码按列优先遍历数组
     * 即在扫描下一列之前先扫描完本列
     * 
     */
    private static void colMajor(int arr[][]) 
        for(int i=0;i<ARR_SIZE;i++)
            for (int j=0;j<ARR_SIZE;j++)
                //See this, we are traversing j first and then i
                arr[i][j]=i+j;
            
        
    

    /**
     * 如果我们转换内外循环
     * 程序就以行优先顺序遍历数组
     * 即在扫描下一行之前先扫描完本行
     * 这意味着我们访问数组时每次都在访问不同的列(因此也在访问不同的页)
     * 代码微小的改变将导致这个程序花费更多的时间完成遍历
     */
    private static void rowMajor(int arr[][]) 
        for(int i=0;i<ARR_SIZE;i++)
            for (int j=0;j<ARR_SIZE;j++)
            /*看这个,我们先遍历j,然后遍历i,但是对于访问元素来说
             * 它们在更远的位置,所以需要花费的更多
             */
            arr[j][i]=i+j;
            
        
    

----------------------------------------------------------------------

三.Arrays 类

java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。


具有以下功能:


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

具体说明请查看下表:

      技术图片


 

 

java数组集合的三种遍历方式(包懂)

...化代码for(inti:arr){System.out.print(arr[i]+"");}3迭代器遍历对于数组而言,就没必要转换为集合类的数据类型,代码反而冗杂。前面两种对于数组集合均适用迭代器对List的遍历List 查看详情

java中数组遍历的三种方式(代码片段)

使用显示数组for,for-each,和toString题目描述1.for循环遍历程序:运行结果:2.foreach语句遍历语法格式:注:运行结果:程序:运行结果:3.Arrays工具类中toString静态方法遍历3.1.程序:运行结果:注... 查看详情

java数组转list的三种方式及对比(代码片段)

...源| blog.csdn.net/x541211190/article/details/79597236本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。一.最常见方式(未必最佳)通过 Arrays.asList(strArray) 方... 查看详情

创建数组的三种方式

1、关键字 var变量名=Array(); 当传入一个值的时候代表数组的长度 如果输入2个值的时候代表数组的数据 vararr=Array(30,20); console.log(arr); 2、构造函数方式 var变量名=newArray(); 当传入一个值的时候代表数组的长度 如果输入... 查看详情

java中对数组的理解及数组经典例题详解(代码片段)

目录前言一、创建数组创建数组的三种方式二、数组的使用1.获取长度&访问元素2.遍历数组2.1使用for循环2.2使用foreach循环2.3Arrays类的toString方法三、数组作为方法的参数3.1打印数组的内容3.2理解引用类型3.3认识null3.4初识JVM内... 查看详情

三种形式遍历集合

...对象,在这里总结的三种简单的方式方式一:将集合变为数组,后遍历数组  Object[]obj=list.toArray();  for(Objects:obj){    System.out.println((String)s);  }方式二 :  get()方法获取。但只能在list集合中使用,只有List集... 查看详情

java输出数组的方法

文章目录数组的输出的三种方式一维数组:1.传统的for循环方式2.foreach循环3.利用Array类中的toString方法二维数组:1.传统的for循环方式2.foreach循环3.利用Array类中的toString方法数组的输出的三种方式一维数组:定义一个... 查看详情

不使用foreach递归遍历多维数组

】不使用foreach递归遍历多维数组【英文标题】:Traversemultidimensionalarrayrecursivelywithoutusingforeach【发布时间】:2012-07-1707:45:45【问题描述】:我有一个这样的数组和使用foreach循环的代码。$arr=array(array(array(\'CAR_TIR\',\'Tires\',100),array(... 查看详情

java怎么输出数组

  Java中数组输出的三种方式。  定义一个int类型数组,用于输出  int[]array=1,2,3,4,5;  第一种方式,传统的for循环方式  for(inti=0;i    System.out.println(a[i]);    第二种方式,foreach循环  for(inta:array)  System.ou... 查看详情

js数组添加元素的三种方式

1、push()结尾添加  数组.push(元素)参数描述newelement1必需。要添加到数组的第一个元素。newelement2可选。要添加到数组的第二个元素。newelementX可选。可添加多个元素。2、unshift()头部添加  数组.unshift(元素)参数描述newelement1必... 查看详情

java基础知识点笔记总结(代码片段)

文章目录1.eclipse操作2.数组定义和概述3.数组静态初始化和动态初始化4.获取数组长度和遍历数组5.不同类型数组的默认值6.数组的内存解析7.多维数组8.二维数组获取长度和遍历数组9.多维数组的默认值10.二维数组的内存解析11.数... 查看详情

PHP循环遍历多维数组并更改值

】PHP循环遍历多维数组并更改值【英文标题】:PHPloopthroughmultidimensionalarrayandchangevalues【发布时间】:2012-11-0819:29:28【问题描述】:我在下面有一个多维数组,我想遍历它并将[menu_cats]的值从一个数字更改为一个字符串,该字符... 查看详情

javascript中清空数组的三种方式

方式1、splice123var ary=[1,2,3,4];ary.splice(0,ary.length);console.log(ary); //输出[],空数组,即被清空了 详细说明:http://www.w3school.com.cn/jsref/jsref_splice.asp方式2、length赋值为0这种方式很有意思,其它语言如Java,其数组的len 查看详情

PHP foreach循环遍历多维数组

】PHPforeach循环遍历多维数组【英文标题】:PHPforeachloopthroughmultidimensionalarray[duplicate]【发布时间】:2010-10-2423:38:03【问题描述】:我有一个数组:$arr_nav=array(array("id"=>"apple","url"=>"apple.html","name"=>"MyApple"),array("id"=>"ora 查看详情

javascript清空数组的三种方式

方式1,splicevarary=[1,2,3,4];ary.splice(0,ary.length);console.log(ary);//输出[],空数组,即被清空了方式2,length赋值为0这种方式很有意思,其它语言如Java,其数组的length是只读的,不能被赋值。如: 查看详情

递归多维数组遍历

Traversesamultidimensionalarrayandreturnsanarraywiththeresults.Italsoechoestheresultasastringjustfordemonstration.functionarray_traverse($arr){ static$recursive_array=array();//Statictomantainstatewhendoingrecursivefunction  //Traversearray,ifavalueisanarraydorecursivecallt... 查看详情

批量删除的三种方式(easyui为例)(代码片段)

...");else$.messager.alert("提示","操作失败","error");)),2、前台传id数组,后台接收数组(后台遍历取值删除)3、前台将id数组转成字符串,后台接收,再转数组,再遍历取值删除 查看详情

检测数据类型的三种方式及区别(代码片段)

vara="iamstring";varb=[1,2,3];varc=newString("abc");//String类实例对象//typeof:null对象数组都是返回Object类型console.log(typeofa);//stringconsole.log(typeofb);//objectconsole.log(typeofc);//object//instanceof无法检测是字符 查看详情