`

JAVA数组知多少

 
阅读更多

               在我讲数组的时候,大家一定对数组有一定的了解或者学过一点,今天我会从一维和二维两方面来谈谈我的理解,多维的有兴趣也可以自己推一下。

              下面我列一张表来比较一下一二维数组的异同:

  一维数组
数组的属性和方法 唯一的属性length
数组的长度 数组名.length
对应下标的元素值 数组名[下标]
数组的定义方式 数据类型 [] 数组名 = new 数据类型[长度];
  数据类型 [] 数组名 = {值,...};
  数据类型 [] 数组名;
  数组名 = new 数据类型[长度];
  数据类型 [] 数组名;
  数组名 = new 数据类型[]{值,...};
存储方式 连续的存储空间
数组的优点 按下标顺序访问,读取速度快
数组的缺点 内存空间在定义的时候就固定了,不能改变内存大小
索引开始位置 a[0]
   
  二维数组
数组的属性和方法 唯一的属性length
数组的长度 行:数组名.length  列:数组名[行下标].length
对应下标的元素值 数组名[行下标][列下标]
数组的定义方式 数据类型 [][] 数组名 = new 数据类型[行][列];
  数据类型 [][] 数组名 = {{值,...},...};
  数据类型 [][] 数组名;
  数组名 = new 数据类型[行][列];
  数据类型 [][] 数组名;
  数组名 = new 数据类型[][]{{值,...},...};
存储方式 连续的存储空间
数组的优点 按下标顺序访问,读取速度快
数组的缺点 内存空间在定义的时候就固定了,不能改变内存大小
索引开始位置 a[0][0]

 

 

              除此以外,Java中的数组分为两类,第一类,基本数据类型

                                                                      第二类,引用类型(对象类型,类类型)

           例如:

             String [] array = new String[10];
             Student stu = new Student();

            此时,array不是String基本数据类型,而是引用类型。

 

 

               下面我简单的附上我写的,一维数组的排序,我用的是插入排序:

import java.util.Random;

//插入排序
/*
 * 外层的for循环要做n-1次,内层的for循环循环次数分析起来要更困难一些,
 * 因为该循环次数依赖于i-1个记录中关键码值小于第i个记录的关键码值
 * 规律:每一个数都与当前数列中的上面的数比较当遇到大于当前数的时候就交换,
 * 最后最上面的数就是最小的
 */
public class Arrayone1 {
    public static void main(String []args){
    	int []a = new int[6];                  //定义一个数组
    	Random r = new Random();               //实例化一个随机数对象
    	for(int k=0;k<6;k++)                   //循环产生随机数
    	      a[k] = r.nextInt(6);
    	for(int i = 1;i<6;i++)
    	for(int j = i;j>0&&(a[j]<a[j-1]);j--){   //比较大小
    			int temp = a[j];                 //小的和打的交换
    			a[j]=a[j-1];
    			a[j-1]=temp;
    		}
    	for(int j=0;j<6;j++)
    	    System.out.print("a[j]="+a[j]+"   ");//循环输出
    }
}

                     二维数组找最大值:我对选择排序进行了稍微的修改得到一个找最大值得方法

import java.util.Random;
public class Arraytwo {
	public static int max=-1;
          public static void main(String []args){
        	   int [][]at = new int[3][3];             //定义二,一维数组
        	   int []ao = new int[9];
        	   Random r = new Random();                //产生随机数
        	   for(int i=0;i<3;i++){
        		   for(int j=0;j<3;j++){
        	           at[i][j] = r.nextInt(9);
        	           ao[i*3+j]=at[i][j];
        		   }
        	   }
        	  for(int j=0;j<9;j++)
            	   System.out.print("a0["+j+"]="+ao[j]+"   ");//循环输出
        	  System.out.println();
        	  for(int i=0;i<3;i++){
       		     for(int j=0;j<3;j++){
       			     System.out.print("at["+i+"]["+j+"]"+at[i][j]+"   ");//循环输出
       	           
       		   }
       	   }
        	   selsort(ao,9);                     //调用排序的函数
        	   int zheng = max/3;                 //取整,即行
        	   int yu = max%3;                    //取余,即列
        	   System.out.print("max="+max+"  "+"yu="+yu+"  "+"zheng="+zheng+"  ");
        	   System.out.println();
        	   System.out.println("最大二维数组的行是"+zheng+"最大二维数组的列是"+yu);
          }
          
          /*
           * 修改的选择排序
           * 选择排序:将数组的最后一个和前面的比较,如果数大,则将下标记用Maxindex录下来,由于交换
           */
          static void selsort(int[] a,int n){
        		  int Maxindex = 1;
        		  for(int j=n-1;j>0;j--){
        			  if(a[j]>a[Maxindex]){
        				  Maxindex = j;
        			  } 
        		  }
        		  max = Maxindex;
          }
}

 网上查过一些取二维数组最大值下表的方法,大部分是将二维转一维,在转回二维。

我的思路是:如果可以找到一维和二维的数组下表的关系就不用这么麻烦了,所以我用到了取余和取整。

分享到:
评论

相关推荐

    JAVA集合系列(4):关于数组复制的几种方法(源码解读)及执行效率,我们知多少?

    目录 前言 1、Arrays.copyOf() 2、System.arraycopy() 3、Arrays.copyOfRange() ...在 Java 中实现数组复制有 5 种方法: 【1】Arrays 类的 copyOf() 方法 【2】System 类的 arraycopy() 方法 【3】Arrays类的copyO

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 284 10.5.1 神秘的Class类 284 10.5.2 覆盖不再神秘 285 10.5.3 instanceof运算符——让...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 284 10.5.1 神秘的Class类 284 10.5.2 覆盖不再神秘 285 10.5.3 instanceof运算符——让...

    java基础入门教程

    第 一 章 Java概 述 § 1.1 Java语 言 出 现 的 背景 、 影 响 及 应 用 前 景 一 、 背 景 最 近 一 年 多 来 ,在 Internet上 出 现 的 特 别 吸 引 人 的 事 件 就是 Ja va语 言 和 用 Java编 写 的 浏 览 器...

    《Java程序设计案例教程》教学课件02Java语言基础.pptx

    标识符命名惯例上(但不强迫)遵循见名知义原则和驼峰命名法。 《Java程序设计案例教程》教学课件02Java语言基础全文共48页,当前为第6页。 2.2 变量和常量 2.2.2 关键字 关键字是Java语言中已被赋予特定含义的...

    java深入解析

    目录 目 录 第1章 基本概念 1 话题1 开门见山——测试...目前更多的开发人员(不乏多年开发经验者),也仅仅停留在Java表面的层次,而本书,将更深入一层地去讨论Java的话题,令读者耳目一新,知其然,更知其所以然。

    jvm指令手册 +JVM必知必会,掌握虚拟机编译过程.rar

    JVM指令主要分为:本地变量表到操作数栈类指令、操作数栈到本地变量表类指令、常数到操作数栈类指令、将数组指定索引的数组推送至操作数栈类指令、将操作数栈数存储到数组指定索引类指令、操作数栈其他相关类指令、...

    魔板游戏Java课程设计报告.doc

    这 次课程设计,还有利于加深对Java课程的进一步了解,也可以巩固所学Java语言基本知 识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的 运用,拓宽常用类库的应用。使学生通过该教学...

    Java 2核心技术,卷I:基础知识(第七版).part1

    Java基本的程序设计结构 3.1 一个简单的Java应用程序 3.2 注释 3.3 数据类型 3.4 变量 3.5 运算符 3.6 字符串 3.7 输入输出 3.8 控制流程 3.9 大数值 3.10 数组 第4章 对象与类...

    Java 2核心技术,卷I:基础知识(第七版).part2

    Java基本的程序设计结构 3.1 一个简单的Java应用程序 3.2 注释 3.3 数据类型 3.4 变量 3.5 运算符 3.6 字符串 3.7 输入输出 3.8 控制流程 3.9 大数值 3.10 数组 第4章 对象与类...

    Java 2核心技术,卷I:基础知识(第七版).part3

    Java基本的程序设计结构 3.1 一个简单的Java应用程序 3.2 注释 3.3 数据类型 3.4 变量 3.5 运算符 3.6 字符串 3.7 输入输出 3.8 控制流程 3.9 大数值 3.10 数组 第4章 对象与类...

    javascript数组去重的六种方法汇总

    据我所知,百度、腾讯、盛大等都在面试里出过这个题目。 这个问题看起来简单,但是其实暗藏杀机。 考的不仅仅是实现这个功能,更能看出你对计算机程序执行的深入理解。  我总共想出了三种算法来实现这个目的: ...

    数据结构和算法必知必会的50个代码实现.zip

    数组 实现一个支持动态扩容的数组 实现一个大小固定的有序数组,支持动态增删改操作 实现两个有序数组合并为一个有序数组 链表 实现单链表、循环链表、双向链表,支持增删操作 实现单链表反转 实现两个有序的...

    Java的六大问题你都懂了吗

    这些问题对于认真学习java的人都要必知的,当然如果你只是初学者就没必要那么严格了,那如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。  一、到底要怎么样初始化!  本问题讨论...

    java-bloomier-filter:Bloomier过滤器数据结构的Java实现

    这是提出的Bloomier过滤器的Java实现 (第3节:最佳Bloomier过滤器)。 据我所知,这是唯一免费的在线实施。 它为不可变和可变结构包括单独的类。 在内部,kryo序列化库用于有效地将存储的值转换为字节数组,可以按...

    leetcode分类-Data_Structures_Practice:记录自己学习数据结构的一些内容(Python/Java)

    数据结构和算法必知必会的50个代码实现 star: 13.6k LeetCode做题记录: 制作算法动画的项目和公众号: 五分钟算法,博客: 我的练习题 array 移动零 283_moveZeros.py MoveZeros.java 两数之和 twoSum.py 三数之和 15_...

    quicksortassignment

    如您所知,比较次数取决于选择哪些元素作为主元,因此我们将要求您探索三种不同的主元规则。 你不应该一一计算比较。 相反,当对长度为 m 的子数组进行递归调用时,您应该简单地将 m−1 添加到您的运行比较总数中。...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    据我所知,JSP基于Java,因此Java程序员可以轻松开始编码。ASP只是一个一般的引擎,具有支持多种语言的能力,不过默认的并且是最常用的还是VBScript。 mod_perl与Perl一样强大,只是更快一些。 二、PHP入门 PHP...

Global site tag (gtag.js) - Google Analytics