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

一,数组的查找

1.线性查找

java 复制代码
//案例:
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.二分法查找

前提一定先排序,再查找

java 复制代码
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

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

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

复制2

html 复制代码
//源数组
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);
}
//此时,改变源数组,新数组里面的数据也不会发生改变

三,数组的扩容

html 复制代码
//需求:扩容后的长度是原来的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
html 复制代码
//源数组
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
html 复制代码
//源数组
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);
}

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

html 复制代码
//案例:设计一个方法,传入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
}

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

六,可变参数

html 复制代码
//案例:设计一个方法,传入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提供类的使用说明书

html 复制代码
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);
相关推荐
史努比.几秒前
Pod控制器
java·开发语言
2的n次方_3 分钟前
二维费用背包问题
java·算法·动态规划
皮皮林5513 分钟前
警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
java
莳光.4 分钟前
122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
java·mybatis
程序猿麦小七8 分钟前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区
敲敲敲-敲代码9 分钟前
游戏设计:推箱子【easyx图形界面/c语言】
c语言·开发语言·游戏
weisian15115 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全
蓝田~17 分钟前
SpringBoot-自定义注解,拦截器
java·spring boot·后端
ROC_bird..18 分钟前
STL - vector的使用和模拟实现
开发语言·c++
.生产的驴19 分钟前
SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性
java·spring boot·后端·spring·spring cloud·gateway·rabbitmq