初学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);
相关推荐
代码代码快快显灵1 小时前
java之异常处理
java·开发语言
墨@#≯1 小时前
感知机及其实践
算法·机器学习·支持向量机
茶馆大橘1 小时前
Spring Validation —— 参数校验框架
java·后端·学习·spring
Kalika0-02 小时前
温度转换-C语言
c语言·开发语言·数据结构·算法
梓桐3 小时前
【算法】- 查找 - 散列表查询(哈希表)
c语言·算法·哈希算法·散列表
阿望要努力上研究生3 小时前
若依项目搭建(黑马经验)
java·redis·node.js·maven·管理系统
一只脑洞君3 小时前
Kubernetes(K8s)的简介
java·容器·kubernetes
zygswo3 小时前
程序猿成长之路之设计模式篇——设计模式简介
java·设计模式
luthane3 小时前
python 实现algorithm topo卡恩拓扑算法
数据结构·python·算法
qq_172805594 小时前
Go 性能剖析工具 pprof 与 Graphviz 教程
开发语言·后端·golang·go