标签:
数组对每门编程语言都是重要的数据结构之一,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 }
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, 5 21 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
标签:
原文地址:http://www.cnblogs.com/moxia/p/5815252.html