zoukankan      html  css  js  c++  java
  • JAVA 数组

      数组对每门编程语言都是重要的数据结构之一,java语言提供的数组是用来储存固定大小的同类型元素的。

      当你需要保存一组数据类型相同的变量或者对象时,我们不可能给每个变量都定义一个变量名,这样的操作会使代码臃肿、工作量大且无意义。这时我们就需要数组来保存这些数据。数组根据需要的不同分为一维数,二维数组和多维数组。下面我们来看下数组的声明、创建和初始化。

      一、数组的声明

      要在程序中使用数组,就需要先声明数组,下面是声明数组变量的语法: 

      一位数组的声明方法: 

      type[] 数组名;(首选方法)

      type  数组名[]; (效果一样,但不推荐)

      数组在声明时不能指定器长度(数组中元素的个数) 

      二、数组的创建 

      Java中使用new关键字来创建数组的,语法如下: 

       方式1(推荐,更能表现现数组的类型)

      type[]  数组名 = new type[数组中元素个数]; 

       eg:

        int[]  a = new  int[3];

      数组名,也即应用a,指向数组元素的首地址。

       方式2(定义时直接初始化)

      type[] 变量名  =  new type[]{逗号分隔的数组元素} 

      其中红色部分可以省掉,所以又分两种:

      1、int[]  num=new int[]{1,2,2,3,3};

      2、int[]  num1= {1,3,6,87,4};

      其中 int[]  num=new int[]{1,2,2,3,3};第二个方括号不能加数组长度,因为数组个数是由后面花括号决定的。

      Java中的每个数组都有length属性,表示数组的长度。

      length属性是public final int的,即length是只读的。数组长度一旦确定,就不能改变大小。

      

      二维数组的定义方法:

     1 int[][] table = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 5, 6, 3 } };
     2 
     3         int[][] table1 = null;
     4         table1 = new int[3][3];
     5 
     6         int[][] table2 = new int[3][3];
     7         table2[0][0] = 11;
     8         table2[0][1] = 121;
     9         table2[0][2] = 11;
    10         table2[1][0] = 11;
    11         table2[1][1] = 121;
    12         table2[1][2] = 11;
    13         table2[2][0] = 11;
    14         table2[2][1] = 121;
    15         table2[2][2] = 11;
    16         System.out.println();

       二维数组的遍历

    1 for (int row = 0; row < table.length; row++) {
    2             for (int column = 0; column < table[row].length; column++) {
    3                 System.out.print(table[row][column] + "	");
    4             }
    5             System.out.println();
    6 }

      三、数组的初始化

      1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
      2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;
      3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。

      动态实例:

     1 public class Arrays
     2 {  
     3      public static void main(String args[]) {  
     4          int a[] ;  
     5          a = new int[3] ;  
     6          a[0] = 0 ;  
     7          a[1] = 1 ;  
     8          a[2] = 2 ;  
     9          String string[] ;  
    10          string= new String[3] ;  
    11          string[0] = "张三";  
    12          string[1] = "李四" ;  
    13          string[2] =  "小明";  
    14      }  
    15 }  

       静态实例:

    1 public class Arrays     
    2 {     
    3      public static void main(String args[]) {     
    4          int a[] = {0,1,2} ;     
    5          String[]  string = {"张三","李四","小敏"} ;     
    6      }     
    7 }   

        默认实例:

    1 public class Arrays     
    2 {     
    3      public static void main(String args[]) {     
    4          int[]  a  = new int [5] ;     
    5          System.out.println("" + a[3]) ;     
    6      }     
    7 }   

        处理数组:

      数组的元素和数组大小是确定的,并且数组的元素有多个,所以当处理数组时,我们通常使用基本for循环和增强for循环 

      示例:

      该实例完整地展示了如何创建、初始化和操纵数组:

     1 public class Array {
     2  2 
     3  3    public static void main(String[] args) {
     4  4       double[] List = {1.9, 2.9, 3.4, 3.5};
     5  5 
     6  6       // 打印所有数组元素
     7  7       for (int i = 0; i <List.length; i++) {
     8  8          System.out.println(List[i] + " ");
     9  9       }
    10 10       // 计算所有元素的总和
    11 11       double total = 0;
    12 12       for (int i = 0; i < List.length; i++) {
    13 13          total += List[i];
    14 14       }
    15 15       System.out.println("Total is " + total);
    16 16       // 查找最大元素
    17 17       double max = List[0];
    18 18       for (int i = 1; i < List.length; i++) {
    19 19          if (List[i] > max) {
    20 20             max = List[i];
    21 21          }
    22 22       }
    23 23       System.out.println("Max is " + max);
    24 24    }
    25 25 }
    Array1.java

       增强for循环遍历数组

        JDK 1.5 引进了一种新的循环类型,它能在不使用下标的情况下遍历数组。

       该实例用来显示数组myList中的所有元素:

     1 public class Array {
     2 
     3    public static void main(String[] args) {
     4       int[] List = {1,9,2,9,3,4,3,5};
     5 
     6       // 打印所有数组元素
     7       for (int a:List) {
     8          System.out.println(a);
     9       }
    10    }
    11 }

       数组的复制

       1、使用for循环复制

     1 public class ArrayCopy {
     2   
     3       public static void main(String[] args) {
     4           int[] number = { 11, 2, 23, 12, 4, 34, 5 };
     5           int[] number1 = new int[number.length];
     6   
     7           if (number != null && number.length > 0) {
     8               for (int i = 0; i < number.length; i++) {
     9                  number1[i] = number[i];
    10              }
    11  
    12              for (int value : number1) {
    13                  System.out.print(value + "	");
    14              }
    15          }
    16      }
    17  }
    Array2.java

        2、copyOf方法复制数组

     1 public class Text {
     2     public static void main(String[] args) {
     3         int[] a={2,5,2,2,2,6,2,3};
     4         
     5         Text t=new Text();
     6         int[] m=t.copyOf(a, a.length);
     7         for(int n :m){
     8             System.out.print(n+" ");
     9         }
    10         
    11         System.out.println();
    12         
    13         int[] b=Arrays.copyOf(a, a.length);
    14         for(int n : b){
    15             System.out.print(n+" ");
    16         }
    17     }
    18     public static int[] copyOf(int[] b,int newLength){
    19         return b;
    20     }
    21 }
    Array3.java

       3、将指定数组的指定范围复制到一个新数组(copyOfRange)

    1 public class Text {
    2     public static void main(String[] args) {
    3         int[] a = { 2, 4, 2, 77, 22, 777, 34 };
    4         int[] b = Arrays.copyOfRange(a, 0, 3);
    5         for (int n : b) {
    6             System.out.print(n + " ");
    7         }
    8     }
    9 }

      数组排序

     1 public class Bubble {
     2 
     3     public static void main(String[] args) {
     4         int a = 100;
     5         int b = 46;
     6         /*
     7          * int temp = 0; temp = a; a = b; b = temp;
     8          */
     9         /*
    10          * a = a + b; b = a - b; a = a - b;
    11          */
    12         /*
    13          * a = a ^ b; b = a ^ b; a = a ^ b;
    14          */
    15 
    16         System.out.println("a=46,b=100 " + "	" + a + " " + b);
    17 
    18         // 冒泡排序
    19         int[] number = { 11, 2, 23, 12, 4, 34, 5 };
    20         // 11, 2, 23, 12, 4, 34, 5
    21 
    22         System.out.println("排序前:");
    23         for (int num : number) {
    24             System.out.print(num + "	");
    25         }
    26 
    27         for (int i = 0; i < number.length; i++) { // 控制拿出数组中的第几个元素
    28             for (int k = 0; k < number.length; k++) {
    29                 if (number[i] > number[k]) {
    30                     int temp = 0;
    31                     temp = number[i];
    32                     number[i] = number[k];
    33                     number[k] = temp;
    34                 }
    35             }
    36         }
    37 
    38         System.out.println("
    排序后:");
    39         for (int num : number) {
    40             System.out.print(num + "	");
    41         }
    42     }
    43 }
    Array4.java

       使用sort方法排序

     1 public class Text {
     2     public static void main(String[] args) {
     3         int[] a = { 2, 4, 2, 77, 22, 777, 34 };
     4         Arrays.sort(a);
     5         for(int b:a){
     6             System.out.print(b+" ");
     7         }
     8     }
     9     
    10 }

       产生一个不重复的随机数组

     1 public class NoRepeatArray {
     2     public static void main(String[] args) {
     3         System.out.println();
     4         Random rd = new Random();
     5         System.out.println(rd.nextInt(5) + 1); // 0-9之间的随机数
     6 
     7         // 从1-5之间生成5个不重复的随机数
     8         int[] numbers = new int[5];
     9         // 定义存储值数组的索引
    10         int index = 0;
    11         System.out.println("---------------------------------
    ");
    12         for (int i = 1; i <= 5; i++) {
    13             Random rd1 = new Random();
    14             int num = rd1.nextInt(5) + 1;
    15 
    16             if (numbers[0] != 0) {
    17                 boolean flag = false; // 控制是否存在重复元素
    18 
    19                 // 遍历生产数组中的元素
    20                 for (int j = 0; j < numbers.length; j++) {
    21 
    22                     if (num != numbers[j]) {
    23                         flag = true;
    24                     } else {
    25                         flag = false;
    26                         break;
    27                     }
    28                 }
    29 
    30                 if (flag == true) {
    31                     numbers[index++] = num;
    32                 } else {
    33 
    34                     // 发现有重复元素重新产生新的随机数
    35                     i--;
    36                 }
    37 
    38             } else {
    39                 numbers[index++] = num;
    40             }
    41 
    42         }
    43 
    44         for (int val : numbers) {
    45             System.out.print(val + "	");
    46         }
    47     }
    48 }
    Array5.java

      数组的比较

       如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。此外,如果两个数组引用都为 null,则认为它们是相等的。

     1 public class Text {
     2     public static void main(String[] args) {
     3         int[] a = { 2, 4, 2, 77, 22, 777, 34 };
     4         int[] b = { 2, 4, 2, 77, 22, 777, 34 };
     5         int[] c = { 4, 2, 22, 77, 2, 777, 34 };
     6         
     7         boolean flag = Arrays.equals(a, b);
     8         System.out.println(flag);
     9         
    10         boolean flag1=Arrays.equals(a, c);
    11         System.out.println(flag1);
    12     }
    13 }

      以上实例编译运行结果如下:

    true
    false

  • 相关阅读:
    《深入理解java虚拟机》第二章:Java内存区域与内存溢出异常-20210716
    mongodb 占用内存及解决方法
    JDK常用分析工具
    mysql表碎片清理和表空间收缩
    Java Array 和 String 的转换
    Discourse 如何查看自己发布的主题
    Discourse 用户的邮件无法投递的时候如何处理
    IntelliJ IDEA 如何在 Java 中进行快速注释
    Java Arrays.asList 和 new ArrayList(Arrays.asList()) 的对比
    Druid 加载 Kafka 流数据的 索引属性(IndexSpec)
  • 原文地址:https://www.cnblogs.com/moxia/p/5815252.html
Copyright © 2011-2022 走看看