初学Java基础Day12---数组的增删改查,可变参数 Arrays工具类

一,数组的查找

1.线性查找

//案例:
int[] arr ={1,55,81,32,68,50,33};
int num =81;//需要查找的元素
for(int i=0;i<arr.length-1;i++){
    if(num==arr[i]){

        System.out.println("找到该元素了下标为:"+i);
        break;
    }
}	

2.二分法查找

       前提一定先排序,再查找

import java.util.Arrays;
public class Test01{
    public static void main(String[] args){
        
        int[] arr = {6,23,7,35,8,24};
       
        //排序
        Arrays.sort(arr);
         int num =81;//需要查找的元素
        
        int start =0;
        int end = arr.length-1;
        while(start <=end){
            int mid = (start+end)/2;
            if(num>arr[mid]){
                start =mid+1;
            }else if(num<arr[mid]){
                end  =mid-1;
            }else{
                System.out.println("找到该元素了,下标为:"+mid);
                break;
            }
            
        }
        
    }
}

二,数组的复制

        复制1

String[] names = {"周杰伦";"陈奕迅";"林俊杰";"杨千嬅","王力宏"};

//新数组
String[] newNames =names;
//改变源数组的数据
names[1] ="马思唯";
//遍历新数组
for(String element : arr){
    System.out.println(element);
}
//注意:复制后,改变源数组,新数组里的数据也会发生改变

        复制2

//源数组
String[] names = {"周杰伦";"陈奕迅";"林俊杰";"杨千嬅","王力宏"};

//新数组
String[] newNames =new String[names.length];
//遍历源数组,将元素赋值给新数组
for(int i =0;i<names.length;i++){
    newNames[i] =names[i];
}
//改变源数组的数据
names[1] ="马思唯";
//遍历新数组
for(String element : arr){
    System.out.println(element);
}
//此时,改变源数组,新数组里面的数据也不会发生改变

三,数组的扩容

//需求:扩容后的长度是原来的1.5倍

//源数组:
String[] names = {"周杰伦","陈奕迅","林俊杰","吴亦凡"};

//获取数组长度
int oldCapacity = names.length;
//计算新数组长度
int newCapacity = oldCapacity+(oldCapacity>>1);//注意加小括号

//新数组 -[null,null,null,null,null,null]
String[] newNames = new String[newCapacity];

//遍历源数组,将数据赋值给新数组
for(int i =0;i<names.length;i++){
    newNames[i] =names[i];
}
//将新数组的地址赋值给源数组
names= newNames;

//遍历数组
for(String element:names){
    System.out.println(element);
}

四,数组的删除

        删除1
//源数组
String[] names = {"陈奕迅","周杰伦","林俊杰","王力宏"};
//新数组
String[] newNames = new String[names.length-1];

//遍历源数组,将“周杰伦”以外的元素赋值到新数组中
int index  =0;
for(String element:names){
    
    if(!element.equals("周杰伦")){
        newNames[index]=element;
        index++;
    }
}
//将新数组的引用赋值给源数组
names= newNames;
//遍历源数组
for(String element:names){
    System.out.println(element);
}

缺点:这种方式删除的数组,会让数组的空间越变越小,数组是用来存储数据的,越变越小会使得存储数据不方便         

        删除2
//源数组
String[] names = {"陈奕迅","周杰伦","林俊杰","王力宏"};
//元素的迁移
for(int i =1;i<names.length-1;i++){
    names[i] =names[i+1];
}

//将最后一个元素赋为null
names[names.length-1] =null;

//遍历源数组
for(String element:names){
    System.out.pritnln(element);
}

五,数组作为方法的参数和返回值

//案例:设计一个方法,传入int类型的数组,返回最大值和最小值

public static void main(String[] args){
int[] arr={6,23,7,35,8,24};
 
    int[] maxAndMin= getMaxAndMin(arr);
    System.out.println("最大值为:"+maxAndMin[0]);
    System.out.println("最小值为:"+maxAndMin[1]);
    
}
public static int[] getMaxAndMin(int[] arr){
    int max = arr[0];
    int min = arr[0];
    for(int i=1;i< arr.length-1;i++){
        
        if(max<arr[i]){
            max=arr[i];
        }
        if(min>arr[i]){
            min=arr[i];
        }
    }
    int[] is = new int[]{max,min};
    return is
}

小结:方法的返回值只能有一个;如果想返回多个数据,就可以将多个数据存入一个数组中。

六,可变参数

//案例:设计一个方法,传入n个int值,获取最大值并返回

public static void main(String[] args){
    
    int max = getMax(new int[]{1,2,3,4,5,67,8});
    System.out.println("最大值为:"+max);
}
public static int getMax(int[] arr){
    int max = arr[0];//假设下标为0的数最大
    for(int i=1;i<arr.length;i++){
        if(max<arr[i]){
            max = arr[i];
        }
    }
    return max;
}

//方法二:可变参数

public static void main(String[] args){
    
    int max = getMax(1,2,3,4,5,67,8);//实参作为元素压入到数组中
    System.out.println("最大值为:"+max);
}
// int... arr就是数组
public static int getMax(int... arr){
    int max = arr[0];//假设下标为0的数最大
    for(int i=1;i<arr.length;i++){
        if(max<arr[i]){
            max = arr[i];
        }
    }
    return max;
}

小结:可变参数就是数组;实参就是数组里的元素;可变参数后不能添加其他参数。

七,Arrays工具类

1.概念

Arrays是Java给我们提供专门操作数组的工具类

2.理解

1.工具类 -该类中所有的方法都是静态的,直接使用类名调用

2.API - Java提供类的使用说明书

int[] arr={18,20,81,35,58,99};

//排序
Arrays.sort(arr);

//查找下标(底层使用二分法去查找元素,所以必须先查找,再排序)
//返回值规则:如果搜素的元素不再数组中,返回(-插入点-1)
int index = Arrays.binarySearch(arr,81);
System.out.println("查找元素的下标为:"+index);

//拷贝数组(目标数组,新的长度)
int[] copyOf =Arrays.copyOf(arr,10);

//拷贝区间数组 (目标数组,开始下标-包含,结束下标-排他)
int[] copyOfRange = Arrays.copyOfRange(arr,1,7);

//替换元素
Arrays.fill(copyOfRange,666);

//替换区间元素 (目标数组  开始下标-包含 结束下标-排他 替换的值)
Arrays.fill(copyOfRange,2,5,888);

//将数组转换为字符串
String str = Arrays.toString(arr); //需要导包,已省略
System.out.println(str);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值