数组(2)

5.命令行参数

 在程序运行过程中,可以向应用程序传递一些参数,这些参数称为命名行参数。

命令行参数以字符串的形式传入args数组中。可以一次传递0-多个参数,以空格分割。

如果参数中本身包含空格,需要使用引号引起来。

 

6.Arrays

    jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作。例如快速输出、排序、查找等。

1)常用方法

 1 import java.util.Arrays;
 2 public class Test03{
 3     public static void main(String[]args){
 4         int [] arr={1,5,3,2,4};
 5         //Arrays 常用方法
 6         
 7          
 8         //【1】数组的字符串型式  Arrays.toString(arr)
 9         System.out.println(Arrays.toString(arr));
10         
11         //【2】sort 对数组排序(只能升序) 
12         Arrays.sort(arr);
13         System.out.println(Arrays.toString(arr));
14         
15         
16         //【3】equals(arr1,arr2)  判断两个数组是否相等
17             //1.长度相等      2.数组对应位置元素相等
18             int [] arr1={1,2,3,4,5};
19             System.out.println(Arrays.equals(arr,arr1));
20             
21         //【4】fill  填充数组 fill(arr,from,to,值)  
22         //0,2指在目标数组从0到2进行填充,包含0,但不包含2,即含头不含尾
23         //值  填充到数组的元素
24         Arrays.fill(arr,0,2,6);
25         System.out.println(Arrays.toString(arr));
26         
27     }
28 }

2)二分法查找元素  (只适用于有序的数组)

 1  //   用二分法查找数组的某个元素  只适用于有序的数组
 2  //    Arrays.binarySearch(arr,t)  t为需要找到的元素
 3 import java.util.Arrays;
 4 public class Test04{
 5     public static void main(String[]args){
 6         int[] arr={1,2,3,5,7,8};
 7         int t=5;
 8         int loc=Arrays.binarySearch(arr,t);
 9         System.out.println("找到:"+loc);
10     }
11 }
12 /*private static int binarySearch0(long[] a, intfromIndex, inttoIndex,
13                                      long key) {
14         int low = fromIndex;
15         int high = toIndex - 1;
16 
17         while (low <= high) {
18             int mid = (low + high) >>> 1;
19             long midVal = a[mid];
20 
21             if (midVal< key)
22                 low = mid + 1;
23             else if (midVal> key)
24                 high = mid - 1;
25             else
26                 return mid; // key found
27         }
28         return -(low + 1);  // key not found.
29     }
30     二分法查找必须是有序的数组,如果找到返回索引;
31     如果没有找到,返回-插入点-1。插入点就是key应该放到数组的位置。
32 */

3)数组的复制

 1 //         数组的复制
 2 import java.util.Arrays;
 3 public class Test01{
 4     public static void main(String[]args){
 5         int[] arr={1,3,5,7,9};
 6         
 7         // 【1】copyOf(arr,len)  复制指定的数组
 8         //   len:复制给新数组的长度    
 9         //   当 len > arr.length,新数组的末尾用0来填充
10         int[] Arr=Arrays.copyOf(arr,6);
11         System.out.println(Arrays.toString(Arr));
12         
13         
14         //  【2】copyOfRange(arr,from,to)  复制数组某一范围
15         //    从arr中from(包含)位置开始复制到to(不包含)这个范围的元素到新数组中。含头不含尾。
16         int[] arr1=Arrays.copyOfRange(arr,0,4);
17         System.out.println(Arrays.toString(arr1));
18         
19                     //[System中也有复制的方法]
20         //  【3】System.arraycopy (src,srcPos,dest,destPos,length) 
21         //      src - 源数组。
22         //        srcPos - 源数组中的起始位置。
23         //        dest - 目标数组。
24         //        destPos - 目标数据中的起始位置。
25         //        length - 要复制的数组元素的长度。
26         
27         int[] arr2=new int[arr.length];
28         System.arraycopy(arr,1,arr2,1,3);
29         System.out.println(Arrays.toString(arr2));
30     }
31 }

 4)判断两个字符串(String)是否相等

         user.equals(_user)            判断user和_user的相等(适用于String)

7. 二维数组

  二维数组就是数组的数组,即数组里的元素也是数组

由图得知,二维数组是行列结构

1)声明方式   三种

根据二维数组的定义进行声明

import java.util.Arrays;
public class Test06{
    public static void main(String[] args){
        
        
        // 【1】声明
        int[][] arr;
        // 【2】初始化一个能存3个一维数组的二维数组
        arr = new int[3][];
        
        // 【3】赋值
        int[] arr1 = {1,2,4,6};
        int[] arr2 = {3,6,7};
        int[] arr3 = {1,4,6,8};
        
        arr[0] = arr1;
        arr[1] = arr2;
        arr[2] = arr3;
        
        System.out.println(arr);
        System.out.println(Arrays.toString(arr));
    }
}

由上知,只给二维数组分配了空间 ,一维数组没有分配空间

一个规则的二维数组进行声明

 1 import java.util.Arrays;
 2 public class Test07{
 3     public static void main(String[] args){
 4         
 5         // 声明一个规则的二维数组,3行4列
 6         int[][] arr;
 7         arr = new int[3][4];
 8         
 9         arr[0][0] = 10;
10         arr[0][1] = 20;
11         arr[0][2] = 30;
12         arr[0][3] = 40;
13         
14         arr[1][0] = 100;
15         arr[1][1] = 200;
16         arr[1][2] = 300;
17         arr[1][3] = 400;
18         
19         arr[2][0] = 1000;
20         arr[2][1] = 2000;
21         arr[2][2] = 3000;
22         arr[2][3] = 4000;
23         
24         System.out.println(Arrays.toString(arr));
25     }
26 }

由上知一维和二维都分配了空间

已知二维数组元素 用字面量进行声明

 1 public class Test08{
 2     public static void main(String[]args){
 3         //声明字面量二维数组  已知数组的值
 4         int[][] arr={
 5             {10,20,30,40},
 6             {100,200,300},
 7             {1000,2000,3000,4000}
 8         };
 9                  System.out.println(Arrays.toString(arr));
10     }
11 }

由上知一维和二维都分配了空间

2)二维数组的遍历

 1 //    二维数组的遍历
 2 
 3 //二维数组是行列结构,使用双层for循环,外层for用于控制行,内层for用于控制列
 4 //    行列结构=>双层for遍历。
 5 
 6 
 7 import java.util.Arrays;
 8 public class Test02{
 9     public static void main(String[]args){
10         //声明字面量二维数组  已知数组的值
11         int[][] arr={
12             {10,20,30,40},
13             {100,200,300},
14             {1000,2000,3000,4000}
15         };
16         //遍历一个二维数组  外层循环为行  内层循环为列
17         for(int i=0;i<arr.length;i++){   //  
18             for(int j=0;j<arr[i].length;j++){   //  
19                 System.out.print(arr[i][j]+"\t");
20             }
21             System.out.println();
22         }
23     }
24 }

 

8.基本数据类型和引用数据类型的区别

import java.util.Arrays;
public class Test09{
    public static void main(String[] args){
        
        // 基本数据类型的赋值
        int a = 10;
        int b;
        b = a;
        // a=10 b=10
        b = 20;
        // a=10 b=20
        
        // 引用数据类型的赋值
        int[] arr = {1,3,5};
        int[] arr2 = arr;
        arr2[0] = 100;
        // arr[0]=100
        System.out.println("arr:"+arr);
        System.out.println("arr2:"+arr2);
        
        System.out.println("arr[0]:"+arr[0]);
        
    }
}
    

总结:

基本数据类型赋值时,复制的是值

引用数据类型赋值时,复制的是引用。(arr2复制的是arr的地址,所以他们指向的都是0x1100这个数组)

 

9.去除数组中的重复元素(用三个for循环解决问题)

做法如下

 1 // 已知一个数组存在重复元素,请去掉数组中的重复元素。
 2 import java.util.Scanner;
 3 import java.util.Arrays;
 4 public class Test13{
 5     public static void main(String[]args){
 6         int [] arr={1,1,1,2,3,3};
 7         int t=0;
 8         int len=arr.length;
 9         for(int i=0;i<len;i++){
10             t=arr[i];
11             for(int j=i+1;j<len;j++){
12                 if(t==arr[j]){   //比较  相等后删除此元素
13                     for(int k=j;k<len-1;k++){
14                         arr[k]=arr[k+1];   //   前移  即删除元素 
15                     }
16                     j--;
17                     arr[len-1]=0;   //  当 前移后  当前最后一位为0
18                     len--;
19                 }
20             }
21         }
22         System.out.println(Arrays.toString(arr));   //  去除重复元素后
23     }
24 }

 

 

 

posted @ 2019-04-18 21:57  他也就火三年  阅读(115)  评论(0编辑  收藏  举报