方法与数组之一维数组的各大神通及Arrays工具类(2)

雨霖先森 2022-09-28 12:04:53

方法与数组之一维数组的各大神通及Arrays工具类(2)

一、数组的扩容

public class 文件名{
    public static void main(String[] args){
​
        //原数组
        String[] names = {"哆哆","咪咪","发发","嘻嘻"};
        
        //计算出新的长度(长度是原数组长度的1.5倍)
        int oldCapacity = names.length;
        int newCapacity = oldCapacity + (oldCapacity>>1);
        
        //创建新数组
        String[] newNames = new String[newCapacity];//{null,null,null,null,null,null}
        
        //遍历原数组,将原数组中的元素复制到新数组中
        //{"哆哆","咪咪","发发","嘻嘻",null,null}
        for(int i = 0;i<names.length;i++){
            newNames[i] = names[i];
        }
        
        //将新数组赋值给原数组
        names = newNames;
        
        //遍历原数组
        for(String element : names){
            System.out.println(element);
        }
    } 
}

二、数组的删除1

缺点:数组开辟空间是用来存放数据的,这种方式的删除会让空间越变越小

public class 文件名{
    public static void main(String[] args){
                //原数组
        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

public class 文件名{
    public static void main(String[] args){
                //原数组
        String[] names = {"哆哆","咪咪","发发","嘻嘻"};
        
        //数据的移位(将要删除的元素的后面元素往前挪一位)
            for(int i = 2;i<names.length-1;i++ ){
                names[i] = names[i+1];
            }
            //将最后一位赋值为null
            names[names.length-1] = null;
            //遍历原数组
            for(String element : names){
                System.out.println(element);
            }
    }
}

四、数组作为参数和返回值

需求:设计一个方法,传入数组,返回最大值和最小值

public class 文件名{
    public static void main(String[] args){
                int [] is = {35,81,18,25,9};
        int [] arr = getMaxAndMin(is);
        
        System.out.println("最大值:" + arr[0]);
        System.out.println("最小值:" + arr[1]);
    }
    
    public static int [] getMaxAndMin(int[] is){
        int max = is[0];
        int min = is[0];
        
        for(int i = 1;i<is.length;i++){
            if(max <is[i]){
                max = is[i];
            }
            if(min > is[i]){
                min = is[i];
            }
        }
        int[] arr = new int[] {max,min};
        return arr;
    }
}

小结

1.数组可以作为方法的参数传入 2.方法的返回值只能返回一个数据,要想返回多个数据,可以将多个数据打包成一个数组

五、可变参数

需求:传入int数组,求最大值

public class 文件名{
    public static void main(String[] args){
        public static void main(String[] args){
        
        //35,81,18,25,9,10,11,12,13 - 作为数组的元素
        int max = getMax(35,81,18,25,9,10,11,12,13);
        System.out.println("最大值为:" + max);
        
    }
    
    //注意:可变参数的底层就是数组
    public static int getMax(int... is){
        
        int max = is[0];
        for(int i = 1;i<is.length;i++){
            if(max < is[i]){
                max = is[i];
            }
        }
        return max;
    }
    
    //注意:可变参数后面不能接任何参数
    public static void method(int i,String... ss){}
}

六、Arrays工具类

1.含义:Java给我们提供的专门操作数组的类

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

import java.util.Arrays;
public class 文件名{
    public static void main(String[] args){
        
        int[] is = {35,81,18,25,9,10,11,12,13};
        
        //排序 - 9,10,11,12,13,18,25,35,81
        Arrays.sort(is);
        
        //搜索 - (注意:必须先排序,再查找,因为底层使用的是二分法查找)
        //返回元素在数组中的下标;如果元素不在数组中则返回 -插入点-1
        int index = Arrays.binarySearch(is,35);
        System.out.println("搜索元素的下标为:" + index);
        
        //拷贝数组/扩容数组
        int[] newIs1 = Arrays.copyOf(is,is.length*2);
        
        //拷贝数组(开始下标-包含,结束下标-不包含)
        int[] newIs2 = Arrays.copyOfRange(newIs1,3,6);
        
        //替换
        Arrays.fill(newIs2,888);
        
        //将数组转换为字符串
        String str = Arrays.toString(newIs2);
        System.out.println(str);
​
    }
}
...全文
250 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧