第五节:Java数组

Java提供了一个数据结构:数组,用于存储相同类型的元素的一个固定大小的连续集合。数组是用于存储数据的集合,但它往往是更有助于认为数组为相同类型的变量的集合。

在节将介绍如何使用索引变量声明数组变量,创建数组,并处理数组。
声明数组变量:
要使用一个程序的数组,必须声明一个变量来引用数组,必须指定数组的变量可以引用的类型。下面是语法来声明一个数组变量:


dataType[] arrayRefVar;   // preferred way.
or
dataType arrayRefVar[];  //  works but not preferred way.

注:风格 dataType[] arrayRefVar 是首选的。风格 dataType arrayRefVar[] 来自于C/C++语言,并采用了在Java中容纳C/C++编程。
例子:
下面的代码片段是这种语法的例子:

double[] myList;         // preferred way.
or
double myList[];         //  works but not preferred way.

String[] aArray = new String[5];
String[] bArray = {"a","b","c", "d", "e"};
String[] cArray = new String[]{"a","b","c","d","e"};

创建数组:
可以通过使用new运算符使用以下语法创建一个数组:

arrayRefVar = new dataType[arraySize];

上面的语句做了两件事:
它创建一个数组使用 new dataType[arraySize];

它分配新创建的数组变量 arrayRefVar 的引用。

声明数组变量,建立一个数组,并分配阵列的参考变量可以在一个语句中被组合,如下所示:

dataType[] arrayRefVar = new dataType[arraySize];

另外,可以创建数组,如下所示:

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

数组元素通过索引访问。数组的下标是从0开始的,也就是说,它们从0开始到 arrayRefVar.length-1.
例子:
下面的语句声明一个数组变量 myList,创建 double 类型10个元素的数组,并把它的引用到 myList :

double[] myList = new double[10];

以下图片代表数组 myList。在这里,myList 有10个 double 值,索引是从0到9。

打印数组

int[] intArray = { 1, 2, 3, 4, 5 };
String intArrayString = Arrays.toString(intArray);

// print directly will print reference value
System.out.println(intArray);
// [I@7150bd4d

System.out.println(intArrayString);
// [1, 2, 3, 4, 5]
这里的重点是说明了Java中数组的引用和值得区别,第三行直接打印intArray,输出的是乱码,因为intArray仅仅是一个地址引用。第4行输出的则是真正的数组值,因为它经过了Arrays.toString()的转化

处理数组:
当处理数组元素,经常使用的是loop循环或foreach循环,因为所有的对数组中的元素是相同类型和数组的大小是已知的。
例子:
下面是一个演示如何创建,初始化和处理数组的完整例子:

public class TestArray {

   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 3.4, 3.5};

      // Print all the array elements
      for (int i = 0; i < myList.length; i++) {
         System.out.println(myList[i] + " ");
      }
      // Summing all elements
      double total = 0;
      for (int i = 0; i < myList.length; i++) {
         total += myList[i];
      }
      System.out.println("Total is " + total);
      // Finding the largest element
      double max = myList[0];
      for (int i = 1; i < myList.length; i++) {
         if (myList[i] > max) max = myList[i];
      }
      System.out.println("Max is " + max);
   }
}

这将产生以下结果:
1.92.93.43.5Total is 11.7Max is 3.5

foreach循环:
JDK 1.5 引入了一个新的 for循环被称为foreach循环或增强的for循环,它无需使用一个索引变量来遍历数组的顺序完成。
例子:
下面的代码显示遍历数组myList 中的所有元素:

public class TestArray {

   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 3.4, 3.5};

      // Print all the array elements
      for (double element: myList) {
         System.out.println(element);
      }
   }
}

这将产生以下结果:

1.9
2.9
3.4
3.5

将数组传递给方法:
正如传递基本类型值的方法,也可以将数组传递给方法。例如,下面的方法显示在一个int数组中的元素:

public static void printArray(int[] array) {
  for (int i = 0; i < array.length; i++) {
    System.out.print(array[i] + " ");
  }
}

可以通过传递数组调用它。例如,下面的语句调用方法PrintArray 显示3,1,2,6,4,2:
printArray(new int[]{3, 1, 2, 6, 4, 2});

返回一个数组的一个方法:
方法也可以返回一个数组。例如,下面所示的方法返回一个数组,它是另一个数组的反转:

public static int[] reverse(int[] list) {
  int[] result = new int[list.length];

  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
    result[j] = list[i];
  }
  return result;
}

Arrays 类:
ava.util.Arrays中的类包含各种静态方法用于排序和搜索数组,数组的比较和填充数组元素。这些方法被重载的所有基本类型。

SN
方法和描述

1
public static int binarySearch(Object[] a, Object key)搜索对象的指定数组(字节,整数,双精度等)使用二进制搜索算法来指定值。该数组必须在进行此调用之前对分类。这将返回索引搜索关键字,如果它被包含在列表 (-(insertion point + 1).

2
public static boolean equals(long[] a, long[] a2)如果多头的两个指定数组彼此相等返回true。两个数组认为是相等判定方法:如果两个数组包含相同的元素数目,并在两个数组元素的所有相应对相等。如果两个数组相等,返回true。同样的方法可以用于所有其它的原始数据类型 (Byte, short, Int, etc.)

3
public static void fill(int[] a, int val)将指定的int值到指定的int型数组中的每个元素。同样的方法可以用于所有其它的原始数据类型(Byte, short, Int etc.)

4
public static void sort(Object[] a)排序对象指定的数组升序排列,根据其元素的自然顺序。同样的方法可以用于所有其它的原始数据类型( Byte, short, Int, etc.)

import java.util.Arrays;

public class JavaFiles{

    public static void main(String[] args) {

        // 实例化字符串数组
        String[] bArray = {"a","b","c"};
        System.out.print(bArray[0]);

        // new 
        String[] aArray = new String[8];
        String[] cArray = new String[]{"a","c"};

        //打印数组
        int[] list = {1,2,3};
        System.out.print(Arrays.toString(list));

        //循环打印数组
        double[] myList = {1.2,3.9,4.8};
        for (int k = 0;k < myList.length; k++ ) {
            System.out.println(myList[k]);
        }

        int total = 0;
        for (int i = 1;i <= 100 ; i++) {
            // total = total + i;
            total += i; // 加赋
        }

        System.out.print(total);

        double[] dList = {1,2,9.8,100.6,87,93};

        double max = dList[0];
        for (int j = 1;j<dList.length ;j++ ) {

            if (dList[j]>max) 
                max = dList[j];

        }
        System.out.print(max);

        int[] eachList = {1,2,3,4,5};
        
        for (int abc : eachList) {
            System.out.println(abc);
        }

        int[] reverse = {1,2,3,4,5};

        int[] result = new int[reverse.length];
        for (int i = 0, j = reverse.length-1; i < reverse.length ;i++, j-- ) {
            result[j] = reverse[i];
        }
        System.out.println(Arrays.toString(result));

        // 方法的调用
        int[] aList = {1,2,3,4,5};

        int[] res = JavaFiles.reverse(aList);
        System.out.println(Arrays.toString(res));

    }


    public static int[] reverse(int[] list) {

      int[] re = new int[list.length];
      for (int i = 0, j = re.length - 1; i < list.length; i++, j--) {
        re[j] = list[i];
      }
      return re;
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,681评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,710评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,623评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,202评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,232评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,368评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,795评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,461评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,647评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,476评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,525评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,226评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,785评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,857评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,090评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,647评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,215评论 2 341

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,547评论 18 399
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,251评论 0 16
  • 一 在藏佛学院“修行”的时候有两个没有披袈裟的汉人在商店里当伙计。佛学院的商店基本上都是喇嘛开的,每逢遇到法会,商...
    了下阅读 530评论 0 0
  • 总是立志颇高,只是大多都随风去了。 关于跑步,我想说点马拉松:马拉松长跑全程距离26英里385码,折合为42.19...
    雀替阅读 582评论 2 0
  • 我曾一度嘲笑司马懿中了孔明的空城计,我说,若我是司马,定派一支小分队杀进去,这盖世之功可就是我的了。但随着时...
    孤石刘琳锋阅读 248评论 0 0