java基礎之數(shù)組常用操作總結(jié)(必看篇)
常用的對數(shù)組進行的操作
1、求數(shù)組中最大值,最小值
思路:假設下標為0的元素是最大值,遍歷數(shù)組,依次跟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("數(shù)組中最大值為:"+max);
System.out.println("數(shù)組中最小值為:"+min);
}
}
2、查找數(shù)組中是否存在某個元素
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)、用二分查找法查找數(shù)組中是否存在某個元素
前提:待查找的數(shù)組必須是有序的(大小有序)
原理:將待查找的元素與數(shù)組中中間下標的元素進行比較,如果大于中間元素,去右邊查找,小于中間元素,去左邊查找。
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、對數(shù)組進行排序
(1)、冒泡排序
原理:相鄰元素進行比較,小的往前趕,大的往后冒,最大值出現(xiàn)的最大索引處
分析:第一次進行比較,大的往后冒,會把最大值排在最大索引處
第二次進行比較,因為最大值已經(jīng)確定了,只需要比較前n-1個元素即可,確定一個第二大值排在第二大索引處
依次確定第三大值,第四大值.............
結(jié)論:N個數(shù)字來排隊,兩兩比較小靠前,外層循環(huán)n-1,內(nèi)層循環(huán)n-1-i

public class TestArray{
public static void main(String[] args){
int[] arr={10,3,8,1,6};
//外層循環(huán)控制比較輪數(shù)
for(int i=0;i<arr.length-1;i++){
//內(nèi)層循環(huán)控制每輪比較次數(shù)
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;
}
}
}
//遍歷數(shù)組
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
(2)、選擇排序
原理:從下標0處開始,依次和后邊的元素進行比較,如果后面元素小于下標0的元素,換位。拿新的下標為0的元素和后邊的進行比較。第一次完畢,最小值出現(xiàn)在索引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,不換位置。第一輪結(jié)束,{1,10,8,3,6}
第二輪比較,上一輪已經(jīng)確定了下標0的元素為最小值,這輪比較從下標1開始,先是10和8比較,換位{1,8,10,3,6};8和3比較,換位{1,3,10,8,6},3和6比較,不換位。第二輪結(jié)束,確定倒數(shù)第二小的元素在下標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;
}
}
}
//遍歷數(shù)組
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
4、刪除數(shù)組中元素
(1)根據(jù)下標刪除元素(空位補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)根據(jù)輸入的元素刪除數(shù)組中對應的元素
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里面常見的對數(shù)組的操作
在java中,除java.lang包下的類和接口可以直接使用外,其他包下的類或接口在使用時需要先導包。
java.util.Arrays類:此類包含用來操作數(shù)組(比如排序和搜索)的各種方法。
這些都是靜態(tài)方法,可以類名.方法名直接使用,這里都以int型數(shù)組為例
1、對數(shù)組進行快速排序
Arrays.sort(int[] arr);對傳入的數(shù)組默認進行升序排序
2、返回指定數(shù)組內(nèi)容的字符串表現(xiàn)形式。
Arrays.toString(int[] arr);
3、使用二分法搜索制定數(shù)組中的某個元素的下標
Arrays.binarySearch(int[] arr);
4、將將指定的 int 值分配給指定 int 型數(shù)組的每個元素。
Arrays.fill(int[] arr,int val);
5、復制指定的數(shù)組,截取或用 0 填充(如有必要),以使副本具有指定的長度。
Arrays.copyOf(int[] arr,int newLength);它的返回值是一個數(shù)組
6、將指定數(shù)組的指定范圍復制到一個新數(shù)組。 包含起始位置但不包含結(jié)束位置。
Arrays.copyOfRange(int[] arr,int from,int to);它的返回值是一個數(shù)組
其他數(shù)組知識:
1、命令行參數(shù):可以在執(zhí)行java命令時為main方法傳入?yún)?shù)值。
用法:運行java命令時傳入命令行參數(shù): java 類名 "值1" "值2"...
public static void main(String[] args){},我們可以看到main方法是一個有參的方法,參數(shù)是一個字符串數(shù)組,在命令行為main方法傳值時,傳入的值都保存在args字符數(shù)組里。
注意:多個參數(shù)值之間用空格分割。參數(shù)的值將會保存到字符串數(shù)組傳入main方法,下標從零開始。
在獲取命令行參數(shù)時需要注意下標不能越界,最大下標應該為參數(shù)的個數(shù)-1
public static void main(String[] args){
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
2、可變參數(shù)
可變參數(shù)是java1.5之后的新特性,可以代表零到多個相同數(shù)據(jù)類型的變量,是為了解決因參數(shù)個數(shù)的變化而導致過多的方法重載問題。
注意:
1、可變參數(shù)只能用于形式參數(shù)(方法定義時),可以把可變參數(shù)當作數(shù)組來處理。
2、一個方法在最多只能有一個可變參數(shù),可變參數(shù)必須作為最后一個參數(shù)。
3、調(diào)用帶可變參數(shù)的方法時,數(shù)據(jù)類型必須與可變參數(shù)的類型對應。
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;
}
}
例題:
合并數(shù)組操作:現(xiàn)有如下一個數(shù)組: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} 要求將以上數(shù)組中值為0的項去掉,將不為0的值存入一個新的數(shù)組,生成的新數(shù)組為: int newArr [] ={1,3,4,5,6,6,5,4,7,6,7,5}
思路: 確定出不為0的個數(shù),這樣可以開辟新數(shù)組;從舊的數(shù)組之中,取出內(nèi)容,并將其賦給新開辟的數(shù)組。
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、使用二分法查找有序數(shù)組中元素。找到返回索引,不存在輸出-1。使用遞歸實現(xiàn)
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基礎之數(shù)組常用操作總結(jié)(必看篇)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
idea中提示Class 'xxx' is never us
這篇文章主要介紹了idea中提示Class 'xxx' is never used的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
詳解springMVC之與json數(shù)據(jù)交互方法
本篇文章主要介紹了詳解springMVC之與json數(shù)據(jù)交互方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
spring boot使用logback實現(xiàn)多環(huán)境日志配置詳解
這篇文章主要介紹了spring boot使用logback實現(xiàn)多環(huán)境日志配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08
多個springboot項目如何使用一個外部共同的application.yml
這篇文章主要介紹了多個springboot項目如何使用一個外部共同的application.yml問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05

