java基础知识-(数组)

java

Java数组

一.  概述

  1.     定义:数组是一种数据结构,用来存储同一类型值的集合。

  2.     数组是存在下标索引的,通过下标可以获取指定位置的元素,数组小标是从0开始的,也就是说下标0对应的就是数组中第1个元素,可以很方便的对数组中的元素进行存取操作。

  3.     数组存在一维数组和多维数组。

二.  一维数组 

  1.     声明方式一

    A.     数据类型   数组名   =   new 数据类型[个数]     

           String s[] = new String[10];

    定义了一个长度为10的String类型的一维数组。

    B.     数据类型[]   数组名  =   new 数据类型[个数]

           String[] s = new String[10];

    定义了一个长度为10的String类型的一维数组。

    数组属于引用数据类型,它指向的是内存中的一个对象的地址。只要使用new对象产生一个对象或数组都会在堆内存中创建一块内存空间,然后将这块空间的内存地址赋给引用变量,

    以上只是声明创建一个大小为10的数组,但是没有给每一个元素赋值,所以体现出来的都是这个数据类型的默认值,即String类型的默认值为null。 

  2.     声明格式二

   A.     数据类型  数组名[]  = {元素1,元素2,元素3,……数值n};

                           int  a[] = {1,3,6,0,2,8,10};
   声明一个为数组长度为7的int类型数组,并静态的为数组每一个小标对应的元素赋值。

     B.     数据类型[]  数组名  =  {元素1,元素2,元素3,……数值n};
        int[] a = {1,3,6,0,2,8,10};

   声明一个为数组长度为7的int类型数组,并静态的为数组每一个小标对应的元素赋值。

  3.     创建一个匿名数组

      new int[]{1,3,6,0,2,8,10};

  4.     数组与数组之间的赋值关系

      String s[] = new String[10];

     String t[] = s;

   

  5.     一维数组长度:数组名.length

  6.     一维数组的有效最大角标:数组名.length-1

三.  二维数组

  1.     定义:

    二维数组实际上是指数组元素为一维数组的一维数组,简单说也就是数组中的数组。

  2.     声明格式一  

    数据类型  数组名[][] =  new  数据类型[个数][个数];

    数据类型[][]   数组名= new    数据类型[个数][个数];

    int arry[] [] = new int[5][6];

  上述语句声明了一个二维数组,其中[5]表示该数组有(0~4)5行,每行有(0~5)6个元素,因此该数组有30个元素,其中[5]也可说是有5个一维数组,

  [6]可以说是每一个一维数组中有6个int型号的元素。

  数组new出来后,就在堆内存中开辟的内存空间,并将所在内存空间地址返回给arry数组变量,因为以上语句只是声明了一个数组并未没一个元素赋值,

  所以都是类型默认值,为0。

  array[0][0]=3;即给第一个一维数组中的第一个元素赋值.

  

  依此方式还可以和其他元素赋值。

  3.     声明格式二   

    int[][] arr = new int[3][];

    此二维数组中含有3个一维数组,每个一维数组的默认初始化值都为null,每个一维数组中的元素值都为0;可对每个一维数组赋值,如:
      arr[0] = new int[3];

      arr[1] = new int[2];

       arr[2] = new int[1];

    对每个一维数组中某个元素赋值:如:

               arr[0][2]=90;

               arr[1][1]=89;

               arr[2][2]=78;

  

  4.     声明格式三  

    显式初始化二维数组:int[][] arr = {{1,5,7},{4,8},{3,9,20,12}}

      A.     以上数组定义了一个长度为3的数组,arr.length=3

      B.     数组中第一维数组的长度:arr[0].length=3

 

四.  数组的应用代码

  1. 获取一个数组中的最大值和最小值  

 1 public class ArrayMaxMinValue  {  

2 public static void main(String[] args) {

3 int[] array = {7,9,6,3,9,8,0,10,2,1};

4 System.out.println("最大值: "+getMaxValue(array));

5 System.out.println("最小值: "+getMinValue(array));

6 }

7 public static int getMaxValue(int 8 int max = a[0];//一开始假设最大值为a[0]

9 for(int i = 1 ; i < a.length ;i++) {

10 if(a[i] > max) {

11 max = a[i];//每一次比较将大值赋值给max变量存储

12 }

13 }

14 return max;

15 }

16 public static int getMinValue(int a[]) {

17 int min = 0;//一开始假设最小值为角标为0的元素

18 for(int i = 1 ; i < a.length ;i++) {

19 if(a[i] < a[min]) {

20 min = i;//每一次比较将最小值的角标赋值给min变量存储

21 }

22 }

23 return a[min];

24 }

25 }

  2.对数组进行排序

 1 public class ArraySortTool  {  

2 public static void main(String[] args) {

3 int[] array = {7,9,6,3,9,8,0,10,2,1};

4 System.out.println("排序前:");

5 printArray(array);

6 bubblSort(array);

7 System.out.println("排序后:");

8 printArray(array);

9 }

10 //选择排序

11 public static void SelectSort(int[] a) {

12 //外层循环写成i < a.length-1,是因为选择排序,

13 //当到最后一个元素的时候,就不需要进行选择排序的,因为数序已 经确定了

14 for(int i = 0 ; i < a.length-1 ; i++) {

15 //内层循环写成i < a.length,是因为每一个选择用来比较的元素都要比较到最后//一个元素,

16 //int j = i+1是因为没一个元素都不需要和自身比较

17 for(int j = i+1 ; j < a.length ; j++) {

18 if(a[i] > a[j]) {

19 //交换两个值

20 int temp = a[j];

21 a[j] = a[i];

22 a[i] = temp;

23 }

24 }

25 }

26 }

27 //冒泡排序

28 public static void bubblSort(int a[]) {

29 //a.length-1冒泡排序是每一次相邻两个元素进行比较,总共要比较a.length-1次

30 //int i=0 是因为比较是从角标0开始的

31 for(int i = 0 ; i < a.length-1; i++) {

32 //a.length-1-i,第一轮全部计较,每轮比较都产生一个最值,

33 //下一轮这个最值就不用参与比较了

34 //int j = i+1因为是相邻比较,所以要改成int j = i+1

35 for(int j = 0 ; j < a.length-1-i ; j++) {

36 //因为是两两比较所以要写成a[j] > a[j+1]

37 if(a[j] > a[j+1]) {

38 int temp = a[j+1];

39 a[j+1] = a[j];

40 a[j] = temp;

41 }

42 }

43 }

44 }

45 //用来打印数组

46 public static void printArray(int a[] ) {

47 System.out.print("[");

48 for(int i = 0 ; i < a.length ; i++) {

49 if(i == a.length-1) {

50 System.out.println(a[i]+"]");

51 }

52 else {

53 System.out.print(a[i]+",");

54 }

55 }

56 }

57 }

  3.查找数组中指定值的索引位置

  

 1 public class ArraySearchTool  {  

2 public static void main(String[] args) {

3 int[] array = {1,5,9,11,20,21,25,30};

4 System.out.println(halfSearch2(array , 25));

5 // System.out.println(oneByoneSearch(array , 10));

6 }

7 //遍历判断查找

8 public static int oneByoneSearch(int[] a , int value) {

9 for(int i = 0 ; i < a.length ; i++) {

10 if(a[i] == value) {

11 return i;

12 }

13 }

14 return -1;

15 }

16 //二分查找1

17 public static int halfSearch(int[] a , int value) {

18 int left = 0;

19 int right = a.length-1;

20 int mid = (left+right) >> 1;

21 while( a[mid] != value) {

22 if(a[mid] > value) {

23 right = mid-1;

24 }

25 else {

26 left = mid+1;

27 }

28 if(left > right) {

29 return -1;

30 }

31 mid = (left+right)>>1;

32 }

33 return mid;

34 }

35 //二分查找2

36 public static int halfSearch2(int[] a, int value) {

37 int left = 0;

38 int right = a.length-1;

39 int mid;

40 while( left <= right) {

41 mid = (left+right) >> 1;

42 if(a[mid] == value) {

43 return mid;

44 }

45 else if(a[mid] > value) {

46 right = mid -1;

47 } else {

48 left = mid+1;

49 }

50 }

51 return -1;

52 }

53 }

五:  编写一个类,类中提供方法可以将任何int类型的数值做八进制、二进制、十六进制转换

  

 1 public class toBintoHextoOctalDemo  {  

2

3 public static void main(String[] args) {

4

5 System.out.println(toBintoHextoOcta( 500 , 15 , 4 ));

6

7 }

8

9 public static String toBintoHextoOcta( int n , int a , int m ) {

10 char[] c = { \'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'A\',\'B\',\'C\',\'D\',\'E\',\'F\' };

11 char[] ch = new char[32];

12 StringBuilder sb = new StringBuilder();

13 int pos = ch.length;

14 while( n != 0) {

15 ch[--pos] = c[ n & a ];

16 n = n >>> m ;

17 }

18 for(int i = pos ; i < ch.length ; i++) {

19 sb.append(ch[i]);

20 }

21 return sb.toString();

22 }

23 }

 

六    扩展应用

  int[] x ,y[];  àx一维数组,y二维数组。

  拆解步骤:

    int[] x;

    int[] y[];

    A.     x[0] = y;错误

    B.     y[0] = x;正确

    C.     y[0][0]=X;错误

    D.    x[0][0] =y;错误

    E.     y[0][0] =x[0]正确

以上是 java基础知识-(数组) 的全部内容, 来源链接: utcz.com/z/391272.html

回到顶部