转载-----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, 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

时间: 2024-12-21 23:06:13

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

[转载]Java数组扩容算法及Java对它的应用

原文链接:http://www.cnblogs.com/gw811/archive/2012/10/07/2714252.html Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的. 2)利用数组复制方法可以变通的实现数组扩容. 3)System.arraycopy()可以复制数组. 4)Arrays.copyOf()可以简便的创建数组副本. 5)创建数组副本的同时将数组长度增加就变通的实现了数组的扩容.  源码展示: 1 public class Array

【Java】数组知识回顾

package another; import java.util.Arrays; import java.util.List; /** * 数组知识回顾 * @author ChristineBassoon */ public class Array { public static void main(String[] args) { //1. 新建数组的三种方式 int[] arr1 = new int[3]; int[] arr2 = {3,2,4,1}; int[] arr3 = new

java基础知识回顾之javaIO类--内存操作流ByteArrayInputStream和ByteArrayOutputSteam(操作字节数组)

直接看代码: package cn.itcast.io.p6.bytestream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; public class ByteArrayStreamDemo { /** * @param args * @throws IOException * 特点 * 1.内存操作流 * 2.不操作底层资源,不调

Java基础知识二次学习--第五章 数组

第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节  视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 栈里面存的数组的引用 实际对象在堆内存里面 (C与C++是分配在栈里的) 内存图: 元素为引用数据类型的数组 引用类型的数组如上图 时间:2017年4月26日15:16:22~2017年4月26日15:19:00 章节:05章_02节  视频长度:05:25 内容:数组元素的创建与使用 心得: 首

java基础知识-(数组)

Java数组 一.  概述 1.     定义:数组是一种数据结构,用来存储同一类型值的集合. 2.     数组是存在下标索引的,通过下标可以获取指定位置的元素,数组小标是从0开始的,也就是说下标0对应的就是数组中第1个元素,可以很方便的对数组中的元素进行存取操作. 3.     数组存在一维数组和多维数组. 二.  一维数组 1.     声明方式一 A.     数据类型   数组名   =   new 数据类型[个数] String s[] = new String[10]; 定义了一个

整理Java基础知识--数组1

Java 数组数组是用来存储固定大小的同类型的元素声明数组必须先声明 才能使用datatype[] arrayRefVar;//首选 []放在最后是为了C/C++的快速理解Javachar[] ch ;或者 char ch[];char ch = new char[arraySize];1.创建一个char数组 含有 arraySize元素2.把新建 char数组的引用 赋值给变量ch数组的使用 public class TestArr{ public static void main(Stri

Java 数组&lt;---&gt;字符串

java 数组->字符串 1.char数组(字符数组)->字符串 可以通过:使用String.copyValueOf(charArray)函数实现. 举例: char[] arr={'a','b','c'}; String string =String.copyValueOf(arr); System.out.println(string);          //abc 2.String数组->字符串 String[] arr ={"0123","sb&q

java基础知识文章汇总

将之前的所有关于Java基础知识的随笔,整理成质量较高的十几篇随笔,几乎是好几篇比较零散的随笔合成现在的一篇,自认为还不错. java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规则 java基础(三) 加强型for循环与Iterator java基础(四) java运算顺序的深入解析 java基础(五) String性质深入解析 java基础(六) switch语句的深入解析 java基础(七) java四种访问权限 java基础(八) 深入解析常量池与装拆箱机制 java

Java基础知识回顾之七 ----- 总结篇

前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数据类型 基本数据类型主要有: byte.short.int.long.float.double.char.boolean 它们可以分为三类: 数值类型:byte.short.int.long.float.double 字符类型:char 布尔型:boolean 其中byte是8位,short是16位