首頁 > Java > java教程 > 主體

java基礎之數組常用操作總結(收藏)

黄舟
發布: 2017-06-04 09:30:29
原創
1358 人瀏覽過

下面小編就為大家帶來一篇java基礎之陣列常用操作總結(必看篇)。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧

常用的對數組進行的操作

1、求數組中最大值,最小值

想法:假設下標示為0的元素是最大值,遍歷陣列 ,依序跟max比較,如果有元素比這個max還大,就把這個值賦給max。最小值同樣

public class TestArray{
  public static void main(String[] args){
    int[] arr={23,45,234,576,34,87,34,12,67};
    int max=arr[0];
    int min=arr[0];
    for(int i=0;i<arr.length;i++){
      if(arr[i]>max){
        max=arr[i];
      }
      if(arr[i]<min){
        min=arr[i];
      }
    }
    System.out.println("数组中最大值为:"+max);
    System.out.println("数组中最小值为:"+min);
  }
}
登入後複製

2、查找數組中是否存在某個元素

import java.util.Scanner;
public class TestArray{
  public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    int[] arr={23,45,234,576,34,87,34,12,67};
    System.out.println("请输入你要查找的元素");
    int element=in.nextInt();
    int i,flag=0;
    for(i=0;i<arr.length;i++){
      if(arr[i]==element){
        flag=1;
        break;
      }
    }
    if(flag==1){
      System.out.println("你要查找的元素的下标为:"+i);
    }else{
      System.out.println("你要查找的元素不存在");
    }
  }
}
登入後複製

(2)、用二分查找法查找數組中是否存在某個元素

前提:待查找的數組必須是有序的(大小有序)

原理:將待查找的元素與數組中中間下標的元素比較,如果大於中間元素,去右邊查找,小於中間元素,去左邊查找。

public static int binarySearch(int[] arr,int ele){
    int left=0;
    int right=arr.length-1;
    int mid;
    int index=-1;
    while(left<=right){
      mid=(left+right)/2;
      if(arr[mid]==ele){
        index=mid;
        break;
      }else if(arr[mid]<ele){
        left=mid+1;
      }else if(arr[mid]>ele){
        right=mid-1;
      }
    }
    return index;
  }
登入後複製

3、對陣列進行排序

#(1)、冒泡排序

原理:相鄰元素進行比較,小的往前趕,大的往後冒,最大值出現的最大索引

#分析:第一次比較,大的往後冒,會把最大值排在最大索引處

第二次進行比較,因為最大值已經確定了,只需要比較前n-1個元素即可,確定一個第二大值排在第二大索引處

依序確定第三大值,第四大值.............

結論:N個數字來排隊,兩兩比較小靠前,外層循環n-1,內層循環n-1-i


#
public class TestArray{
  public static void main(String[] args){
    int[] arr={10,3,8,1,6};
    //外层循环控制比较轮数
    for(int i=0;i<arr.length-1;i++){
      //内层循环控制每轮比较次数
      for(int j=0;j<arr.length-1-i;j++){
        if(arr[j]>arr[j+1]){
          int temp=arr[j];
          arr[j]=arr[j+1];
          arr[j+1]=temp;
        }
      }
    }
    //遍历数组
    for(int i=0;i<arr.length;i++){
      System.out.println(arr[i]);
    }
  }
}
登入後複製

(2)、選擇排序

# #原理:從下標0處開始,依序和後邊的元素進行比較,如果後面元素小於下標0的元素,則換位。拿新的下標為0的元素和後邊的做比較。第一次完畢,最小值出現在索引0處

例:{10,3,8,1,6}

第一輪比較,從0下標元素開始,依次和後邊的元素進行比較,先是10和3進行比較,10<3,交換位置,下標0的元素變成3,{3,10,8,1,6};再拿3和8比較,3< ;8,不換位;3和1進行比較,3>1,換位

{1,10,8,3,6},然後拿1和6比較,1<6,不換位置。第一輪結束,{1,10,8,3,6}

第二輪比較,上一輪已經確定了下標0的元素為最小值,這輪比較從下標1開始,先是10和8比較,換位{1,8,10,3,6};8和3比較,換位{1,3,10,8,6},3和6比較,不換位。第二輪結束,確定倒數第二小的元素在下標1位置。

........

共比較length-1回合。


public class TestArray{
  public static void main(String[] args){
    int[] arr={10,3,8,1,6};
    for(int i=0;i<arr.length-1;i++){
      for(int j=i+1;j<arr.length;j++){
        if(arr[i]>arr[j]){
          int temp=arr[i];
          arr[i]=arr[j];
          arr[j]=temp;
        }
      }
    }
    //遍历数组
    for(int i=0;i<arr.length;i++){
      System.out.println(arr[i]);
    }
  }
}
登入後複製

#4、刪除在陣列中元素

(1)根據下標刪除元素(空位補0)


#

public static void delete(int[] arr,int index){
    for(int i=index;i<arr.length-1;i++){
      arr[i]=arr[i+1];
    }
    arr[arr.length-1]=0;
    System.out.println(Arrays.toString(arr));
  }
登入後複製

(2)根據輸入的元素刪除數組中對應的元素


#

public static void delete(int[] arr,int ele){
    int index=-1;
    for(int i=0;i<arr.length;i++){
      if(arr[i]==ele){
        index=i;
      }
    }
    for(int i=index;i<arr.length-1;i++){
      arr[i]=arr[i+1];
    }
    arr[arr.length-1]=0;
    System.out.println(Arrays.toString(arr));
  }
登入後複製

下面介紹一些API 裡面常見的對陣列的運算

在java中,除java.

lang套件下的類別和介面可以直接使用外,其他套件下的類別或介面在使用時需要先導套件。

java.util.Arrays類別:此類包含用來操作陣列(例如排序和

搜尋)的各種方法。

這些都是

靜態方法,可以類別名稱.方法名稱直接使用,這裡都以int型陣列為例

1、对数组进行快速排序

Arrays.sort(int[] arr);对传入的数组默认进行升序排序

2、返回指定数组内容的字符串表现形式。

Arrays.toString(int[] arr);

3、使用二分法搜索制定数组中的某个元素的下标

Arrays.binarySearch(int[] arr);

4、将将指定的 int 值分配给指定 int 型数组的每个元素。

Arrays.fill(int[] arr,int val);

5、复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。

Arrays.copyOf(int[] arr,int newLength);它的返回值是一个数组

6、将指定数组的指定范围复制到一个新数组。 包含起始位置但不包含结束位置。

Arrays.copyOfRange(int[] arr,int from,int to);它的返回值是一个数组

其他数组知识:

1、命令行参数:可以在执行java命令时为main方法传入参数值。

用法:运行java命令时传入命令行参数: java 类名 "值1" "值2"...

public static void main(String[] args){},我们可以看到main方法是一个有参的方法,参数是一个字符串数组,在命令行为main方法传值时,传入的值都保存在args字符数组里。

注意:多个参数值之间用空格分割。参数的值将会保存到字符串数组传入main方法,下标从零开始。

在获取命令行参数时需要注意下标不能越界,最大下标应该为参数的个数-1


public static void main(String[] args){
     for(int i=0;i<args.length;i++){
         System.out.println(args[i]);
     }
 }
登入後複製

2、可变参数

可变参数是java1.5之后的新特性,可以代表零到多个相同数据类型变量,是为了解决因参数个数的变化而导致过多的方法重载问题。

注意:

1、可变参数只能用于形式参数(方法定义时),可以把可变参数当作数组来处理。

2、一个方法在最多只能有一个可变参数,可变参数必须作为最后一个参数。

3、调用带可变参数的方法时,数据类型必须与可变参数的类型对应。


public class Test1 {
  public static void main(String[] args){
    double sum=add(4,2.1,3.4,1.2);
    System.out.println(sum);
  }
  public static double add(int a,double...b){
    double sum=a;
    for(int i=0;i<b.length;i++){
      sum+=b[i];
    }
    return sum;
  }
}
登入後複製

例题:

合并数组操作:现有如下一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为: int newArr [] ={1,3,4,5,6,6,5,4,7,6,7,5}

思路: 确定出不为0的个数,这样可以开辟新数组;从旧的数组之中,取出内容,并将其赋给新开辟的数组。


public class Test1 {
  public static void main(String[] args){
    int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
    int[] arr=mergeArrays(oldArr);
    System.out.println(Arrays.toString(arr));
  }
  public static int[] mergeArrays(int[] oldArr){
    int count=0;
    for(int i=0;i<oldArr.length;i++){
      if(oldArr[i]!=0){
        count++;
      }
    }
    int[] newArr=new int[count];
    int index=0;
    for(int i=0;i<oldArr.length;i++){
      if(oldArr[i]!=0){
        newArr[index]=oldArr[i];
        index++;
      }
    }
    return newArr;
  }
}
登入後複製

2、使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。使用递归实现


public class Test1 {
  public static void main(String[] args){
    int[] arr={1,2,3,4,5,6,7,8};
    int index=binarySearch(arr,6,0,arr.length-1);
    System.out.println(index);
  }
  public static int binarySearch(int[] arr,int ele,int left,int right){
    int mid=(left+right)/2;
    if(arr[mid]==ele){
      return mid;
    }else if(arr[mid]<ele){
      return binarySearch(arr,ele,mid+1,right);
    }else if(arr[mid]>ele){
      return binarySearch(arr,ele,left,mid-1);
    }
    return -1;
  }
}
登入後複製

以上是java基礎之數組常用操作總結(收藏)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板