好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

一篇文章带你深入了解Java基础(5)

1、数组

数组的引用传递

?

1

2

3

4

5

6

7

8

9

public class TestDemo1{

     public static void main(String args[]){

         int data[] = null ;

         data = new int [ 3 ];

         data[ 0 ] = 10 ;   //第一个元素

         data[ 1 ] = 20 ;   //第二个元素

         data[ 2 ] = 30 ;   //第三个元素

     }

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

public class TestDemo1{

     public static void main(String args[]){

         int data[] = null ;

         int temp[] = null ;

         data = new int [ 3 ];

         data[ 0 ] = 10 ;   //第一个元素

         data[ 1 ] = 20 ;   //第二个元素

         data[ 2 ] = 30 ;   //第三个元素

         temp = data;

         temp[ 0 ] = 99 ;

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

             System.out.println(temp[i]);

         }

     }

}

引用传递分析都是一个套路,不同的堆被同一个栈内存所指向。

数组的静态初始化

?

1

2

3

4

5

6

7

8

9

public class TestDemo2{

     public static void main(String args[]){

         //数组静态初始化的两种方式

         //简化格式

         int data [] = { 1 , 2 , 3 };

         //完整格式

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

     }

}

数组的最大缺点:长度固定。

数组与方法的调用

?

1

2

3

4

5

6

7

8

9

10

11

12

public class TestDemo2{

     public static void main(String args[]){

         int data [] = new int []{ 1 , 2 , 3 , 4 , 5 };

         printfArray(data);  //int temp [] = data;

     }

     //定义一个专门用于数组输出的方法

     public static void printfArray( int temp[]){

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

             System.out.println(temp[i] + "、" );

         }

     }

}

方法返回数组

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

public class TestDemo2{

     public static void main(String args[]){

         int data [] = init();   //接受数组

         printfArray(data);  //int temp [] = data;

     }

     //此时的方法希望可以返回一个数组类型,所以

     //返回值类型定义为整型数组

     public static int [] init(){

         return new int []{ 1 , 2 , 3 , 4 , 5 };

     }

     //定义一个专门用于数组输出的方法

     public static void printfArray( int temp[]){

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

             System.out.println(temp[i] + "、" );

         }

     }

}

扩大数组的内容

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

public class TestDemo2{

     public static void main(String args[]){

         int data [] = init();   //接受数组

         inc(data);  //扩大数组的内容

         printfArray(data);  //int temp [] = data;

     }

     //此时的方法希望可以返回一个数组类型,所以

     //返回值类型定义为整型数组

     public static int [] init(){

         return new int []{ 1 , 2 , 3 , 4 , 5 };

     }

     public static void inc( int arr[]){  //没有返回值

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

             arr[i] *= 2 ;

         }

     }

     //定义一个专门用于数组输出的方法

     public static void printfArray( int temp[]){

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

             System.out.println(temp[i] + "、" );

         }

     }

}

Java对数组的支持

在java本身的类库中也提供有对于数组相关的方法。

1、数组的排序:java.util.Arrays.sort(数组名称)

?

1

2

3

4

5

6

7

8

9

public class TestDemo3{

     public static void main(String args[]){

         int data [] = new int [] { 12 , 3 , 54 , 23 , 64 , 11 };

         java.util.Arrays.sort(data);

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

             System.out.println(data[i]);

         }

     }

}

2、数组的拷贝:指的是将一个数组的部分内容替换掉另一个数组的部分内容

方法:System.arraycopy(源数组名称,源数组开始,目标数组名称,目标数组开始点,拷贝长度);

数组的数据分析

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

public class TestDemo3{

     public static void main(String args[]){

         int data [] = new int [] { 12 , 3 , 54 , 23 , 64 , 11 };

         int max = data[ 0 ]; 

         int min = data[ 0 ];

         int sum = 0 ;

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

             sum += data[i];

             if (data[i]>max){

                 max = data[i];

             }

             if (data[i]<min){

                 min = data[i];

             }

         }

         System.out.println( "max = " + max);     //求最大值

         System.out.println( "min = " + min);     //求最小值

         System.out.println( "sum = " + sum);     //求总和

         System.out.println( "average = " + sum/( double )data.length); //求平均值

     }

}

数组排序

发现最终要进行循环的次数就是N^(n-1),时间复杂度高。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

public class TestDemo4{

     public static void main(String args[]){

         int data [] = new int [] { 9 , 8 , 5 , 6 , 4 , 2 , 1 , 0 , 3 , 7 };

         sort(data);

         printfArray(data);

     }

     public static void sort( int arr[]){ //实现数组的升序排序

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

         //控制循环的次数

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

                 if (arr[j]>arr[j+ 1 ]){

                     int temp = arr[j];

                     arr[j] = arr[j+ 1 ];

                     arr[j+ 1 ] = temp;

                 }

             }

         }

     }

     //定义一个专门用于数组输出的方法

     public static void printfArray( int temp[]){

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

             System.out.println(temp[i] + "、" );

         }

     }

}

数组的转置

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

public class TestDemo4{

     public static void main(String args[]){

         int data [] = new int [] { 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 };

         reverse(data);

         printfArray(data);

     }

     public static void reverse( int arr[]){

         int center = arr.length / 2 ;    //转换次数

         int head = 0 ;   //头部索引

         int tail = arr.length - 1 ;  //尾部索引

         for ( int i = 0 ; i < center ; i++){

             int temp = arr[head];

             arr[head] = arr[tail];

             arr[tail] = temp;

             head ++;tail --;

         }

     }

     //定义一个专门用于数组输出的方法

     public static void printfArray( int temp[]){

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

             System.out.print(temp[i] + "、" );

         }

     }

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

public class TestDemo5{

//二维数组转置

     public static void main(String args[]){

         int data [][] = new int [][] {{ 9 , 8 , 7 },{ 6 , 5 , 4 },{ 3 , 2 , 1 }};

         reverse(data);

         printfArray(data);

     }

     public static void reverse( int arr[][]){

         int count = arr.length; //转换次数

         System.out.println(count);

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

             for ( int j = i; j < arr.length; j++){

                 if (i != j){

                     int temp = arr[i][j];

                     arr[i][j] = arr[j][i];

                     arr[j][i] = temp;

                 }

             }

         }

     }

     //定义一个专门用于数组输出的方法

     public static void printfArray( int temp[][]){

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

             for ( int j = 0 ; j < temp[i].length ; j++){

                 System.out.print(temp[i][j] + "、" );

             }

                 System.out.println();

         }

     }

}

数组的二分查找法

要求你在一个指定的数组之中查询一个数据的位置。

普通的查找的时间复杂度是n.

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

public class TestDemo6{

//二分查找

     public static void main(String args[]){

         int data [] = new int [] { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 };

         int search = 9 ;

         System.out.println(binarySearch(data, 0 , data.length- 1 , search));

     }

     public static int binarySearch( int arr[], int form, int to, int key){

         if (form < to){

         int mid = (form / 2 ) + (to / 2 );    //确定中间位置索引

             if (arr[mid] == key){

                 return mid;

             } else if (key > arr[mid]){

                 return binarySearch(arr, mid+ 1 , to , key);

             } else if (key < arr[mid]){

                 return binarySearch(arr, form, mid- 1 , key);

             }

         }

         return - 1 ;

     }

}

对象数组

之前所接触的都是基本数据类型的数据,那么对象也可以将其定义为数组,这样操作形式叫做对象数组。对象数组往往是引用数据类型为主的定义,例如类、接口,而且对象数组分为两种定义格式。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

class Person{

     private String name;

     private int age;

     public Person(String n, int a){

         name = n;

         age = a;

     }

     public void setName(String n){

         name = n;

     }

     public void setAge( int a){

         age = a;

     }

     public String getName(){

         return name;

     }

     public int getAge(){

         return age;

     }

     public String getInfo(){

         return "name = " + name + ",age = " + age;

     }

}

public class TestDemo7{

//对象数组

     public static void main(String args[]){

         Person per [] = new Person [ 3 ]; //动态初始化

         Person per1 [] = new Person [] {

             new Person( "张三" , 22 ),

             new Person( "张三1" , 22 ),

             new Person( "张三2" , 22 )

         };  //静态初始化

         per[ 0 ] = new Person( "张三" , 22 );

         per[ 1 ] = new Person( "李四" , 30 );

         per[ 2 ] = new Person( "王五" , 13 );

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

             System.out.println(per[i].getInfo());

         }

         System.out.println();

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

             System.out.println(per1[i].getInfo());

         }

     }

}

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

原文链接:https://blog.csdn.net/zsr6135/article/details/119193020

查看更多关于一篇文章带你深入了解Java基础(5)的详细内容...

  阅读:15次