java数组

java数组

数组的基本操作:
1.填充替换数组元素: 
    Arrays.fill(int[],value)    将指定的int值分配给每个int型数组的每个元素
    Arrays.fill(int[],start,end,value)  指定将int值分配在start与end-1的范围内

2.对数组进行排序:Arrays.sort(object)

3.复制数组:
    Arrays.copyOf(arr,int newlength)    复制数组至指定长度
    Arrays.copyOfRange(arr, from, to)   将指定数组的指定长度复制到一个新数组

1.数组:数组是存储同一种数据类型数据的集合容器。

2.数组的定义格式:

数据类型[]  变量名 = new 数据类型[长度];

3.数组的初始化方式:

动态初始化:
    数据类型[] 变量名 = new 数据类型[长度];

静态初始化:  
    数据类型[] 变量名 = {元素1,元素2.....};

如果程序一开始你就已经确定了数据,那么这时候建议使用静态初始化。如果
数据一开始还不太明确,这时候就建议使用动态初始化。

4.分析数组:

左边: int[] arr    声明了一个int类型的的数组变量,变量名为arr。
    int : 表示该数组容器只能存储int类型的数据。
    [] : 这是一个数组类型。
    arr : 变量名.

右边:new int[50]; 创建了一个长度为50int类型数组对象。
    new : 创建数组对象的关键字。
    int:  表示该数组对象只能存储int类型数据。
    []: 表示是数组类型。
    50 : 该数组最多能存储50个数据。数组的容量。

5.数组的好处: 对分配到数组对象中每一个数据都分配一个编号(索引值、角标、下标),索引值的范围是从0开始,最大是: 长度-1.

6.数组的内存分析:

int[] arr1 = new int[2];
        int[] arr2 = new int[2];
        arr1[1] = 10;
        arr2[1] = 20;
        System.out.println(arr1[1]);  // 吴: 10  李:10  

        int[] arr2 = arr1;
        arr1[1] = 10;
        arr2[1] = 20;
        System.out.println(arr1[1]);  // 20 20 20

7.数组中最常见的问题:

1. NullPointerException 空指针异常
原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。\

2. ArrayIndexOutOfBoundsException 索引值越界。
原因:访问了不存在的索引值。

8.习题
需求1: 定义一个函数接收一个int类型的数组对象,找出数组对象中 的最大元素返回给调用者。

public static void main(String[] args) 
    {
        int[] arr = {-12,-14,-5,-26,-4};
        int max = getMax(arr);
        System.out.println("最大值:"+ max); 
    }


    public static int  getMax(int[] arr){
        int max = arr[0]; //用于记录最大值
        for(int i = 1 ; i < arr.length ; i++){
            if(arr[i]>max){  //如果发现有元素比max大,那么max变量就记录该元素。
                max = arr[i];
            }
        }
        return max;
    }

需求2: 定义一个函数接收一个int类型的数组对象, 把数组中的最大值放在数组中的第一位。

选择排序(直接排序):使用一个元素与其他 的元素挨个比较一次,符合条件交换位置。

public static void main(String[] args) 
    {
        int[] arr = {12,5,17,8,9};  //对于5元素的数组,只需要找出4个最大值就可以排序了。
        selectSort(arr);
    }

    public static void selectSort(int[] arr){

        //把最大值放在首位置。
        for(int j = 0; j<arr.length-1; j++){  //  控制的是轮数。
            for(int i = j+1 ; i<arr.length ; i++){ // 找出最大值
                if(arr[i]>arr[j]){
                    //交换位置
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }

需求3:定义一个函数接收一个数组对象和一个要查找的目标元素,函数要返回该目标元素在
数组中的索引值,如果目标元素不存在数组中,那么返回-1表示。

折半查找法(二分法): 使用前提必需是有序的数组。

public static void main(String[] args) 
    {
        int[] arr = {12,16,19,23,54};
        //int index = searchEle(arr,23);
        int index = halfSearch(arr,16);
        System.out.println("元素所在的索引值是:"+ index);
    }


    public static int halfSearch(int[] arr, int target){
        //定义三个变量分别记录最大、最小、中间的查找范围索引值
        int max = arr.length-1;
        int min = 0;
        int mid = (max+min)/2;
        while(true){
            if(target>arr[mid]){
                min = mid+1;
            }else if(target<arr[mid]){
                max = mid -1;
            }else{
                //找到了元素
                return mid;
            }

            //没有找到的情况
            if (max<min){
                return -1;
            }

            //重新计算中间索引值
            mid = (min+max)/2;
        }

    }
    public static int searchEle(int[] arr, int target){
        for(int i = 0 ; i<arr.length ; i++){
            if(arr[i]==target){
                return i;
            }
        }
        return -1;
    }

需求4: 定义 一个函数接收一个char类型的数组对象,然后翻转数组中的元素。

public static void main(String[] args) 
    {
        //System.out.println("Hello World!");
        char[] arr = {'a','b','c','d','e'};
        reverse(arr);

    }

    public static void reverse(char[] arr){
        for(int startIndex = 0 ,endIndex = arr.length-1 ;   startIndex<endIndex ; startIndex++,endIndex--){
            char temp = arr[startIndex];
            arr[startIndex] = arr[endIndex];
            arr[endIndex] = temp;
        }

        //遍历数组,查看效果
        System.out.print("目前的元素:");
        for (int i = 0 ; i<arr.length  ;i++){
            System.out.print(arr[i]+",");
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值