首页 > 代码库 > 转载-----java数组知识(http://www.cnblogs.com/moxia/p/5815252.html)

转载-----java数组知识(http://www.cnblogs.com/moxia/p/5815252.html)

原文链接

 数组对每门编程语言都是重要的数据结构之一,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] + "\t");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 }

   增强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 + "\t");14              }15          }16      }17  }

    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 }

   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 " + "\t" + a + " " + b);17 18         // 冒泡排序19         int[] number = { 11, 2, 23, 12, 4, 34, 5 };20         // 11, 2, 23, 12, 4, 34, 521 22         System.out.println("排序前:");23         for (int num : number) {24             System.out.print(num + "\t");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("\n排序后:");39         for (int num : number) {40             System.out.print(num + "\t");41         }42     }43 }

   使用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("---------------------------------\n");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 + "\t");46         }47     }48 }

 

 

 

  数组的比较

   如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。此外,如果两个数组引用都为 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数组知识(http://www.cnblogs.com/moxia/p/5815252.html)