Review07数组_日期类_数组工具类

1、数组
    数组当中如果存储的是“java对象”的话,实际上存储的是对象的“引用(内存地址)”。
    数组一旦创建,在java中规定,长度不可变。
    所有的数组对象都有length属性(java自带),用来获取数组中元素的个数。
    所有的数组都是拿第一个元素的内存地址(第一个小方框)的内存地址作为整个对象的内存地址。
    常见异常:
        ArrayIndexOutOfBoundsException数组索引越界异常
    怎么声明/定义一个一维数组?
        语法格式:
            int[] array1;
            double[] array2;
            Object[] array3;
            ......

    数组的遍历:
for (int i = a.length-1;i >= 0;i--){
            System.out.println(a[i]);//i为下标
        }
2、调用以数组为参数的方法(即数组可以作为方法的参数)
    如:public static void printArray(String[] array){}
            String[] y = new String[5];
            printArray(y);//5个null
3、关于数组的扩容:
    无法直接扩容(因为一旦确定,长度不变),只能新建一个大容量的数组,再将原数组中的元素一个一个copy过去。
    因为涉及到copy,所以数组的扩容效率很低,所以以后尽量少扩容,最好一开始创建的时候就预估准确一点,减少后期的扩容次数。
     copy方法:
        System.arraycopy(object src,int srcPos, Object dest, int destPos,int length);
        System.arraycopy(源数组,源数组需要copy的起始位置, 目标数组, 目标数组开始存放的起始位置,copy长度);
     如:
        int[] i1 = {1,2,3,4,5,6,7,8,9};
        int[] i2 = new int[11];
        System.arraycopy(i1,2,i2,3,5);//00034567000
4、二维数组
    关于java中的二维数组
   4.1、二维数组其实是一个特殊的一维数组,特殊在这个一维数组当中每一个元素是一个一维数组。
   4.2、三维数组是什么?
        同理
   4.3、二维数组的静态、动态初始化
        int[][] array = {{1,2,3},{0,0,0,0,2},{10,20}}
        int[][] array = new int[3][4];//new一个包含三个一维数组,每个一维数组有4个元素的二维数组
   4.4、二维数组的遍历及相关操作(见代码)
int[][] b1 = {{1,2,3},{0,0,0,0,2},{10,20}};
        //二维数组的遍历
        for (int i = 0;i < b1.length;i++){
            for (int j = 0;j < b1[i].length;j++){
                System.out.print(b1[i][j]);
            }
            System.out.println();
        }

        //访问二维数组的length属性
        System.out.println(b1.length);//3
        //访问二维数组中元素(一维数组)的length属性
        System.out.println(b1[1].length);//5
        //访问二维数组中元素(一维数组)的元素(以下是b1第2个元素(数组)的第3个元素)。不要忽略下标0.
        System.out.println(b1[1][2]);//0
5、选择排序
    每一次从这一堆参与比较的数据中找出最小值,
    拿着这个最小值和“参与比较的这堆元素最前面的元素”交换位置。
public class SelectSort {
    public static void main(String[] args) {
        int[] array = {9,8,8,8,6,0,11};
        int k = 0;//计算比较次数
        int k2 = 0;//交换次数
        for (int i = 0; i < array.length-1; i++) {//外层选择循环次数:length-1
            //i正好是参与比较的元素中第一个元素的下标(对于整个数组而言)
            //假设比较的元素中第一个元素是最小的:
            int min = i;//
            for (int j = i+1; j < array.length; j++) {
                k++;
                if (array[j] < array[min]) {
                    min = j;//最小值下标是j
                }
            }
            if (min != i) {
                int temp = array[min];//怎么交换?建立中间变量
                array[min] = array[i];
                array[i] = temp;//完成交换
                k2++;
            }
        }
        System.out.println(k);
        System.out.println(k2);
        for (int i = 0; i < array.length ; i++) {
            System.out.print(array[i] + " ");
        }
    }
}
6、冒泡排序
    冒泡排序算法实现
    int[] array = {9,5,24,16,7,3,2,854,264,45,12,1,85,236};
    排序循环次数:array.length-1
    排序原理,两个相邻的数据比对,将较大的数据放到右边。

    冒泡排序跟选择排序的算法实现需要记住。
public class BubbleTest {
    public static void main(String[] args) {
        int[] array = {9,8,8,8,6,0,11};
        int k = 0;//比较次数
        int k2 = 0;//交换次数
        //两层循环,外层控制排序循环次数,里层控制本次循环的交换次数
        //外层循环
        for (int i = array.length-1; i > 0 ; i--) {//为什么从i = array.length-1开始?i取不取0?
            for (int j = 0; j < i; j++) {
                k++;//内层循环多少次怎么确定?比如:7个元素,总循环6次,第一次循环是7个数据比较7次(即内层循环7次)
                if (array[j] > array[j+1]){//当前一个数据比后一个数据大的时候,交换位置。前一个数据是什么
                    int temp = array[j];//怎么交换?建立中间变量
                    array[j] = array[j+1];
                    array[j+1] = temp;//完成交换
                    k2++;
                }
            }
        }
        System.out.println(k);
        System.out.println(k2);
        //遍历看看?
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }
}
7、数组的遍历查找
public static int arraySearch(int[] array, int j) {
        for (int i = 0;i < array.length;i++){
            if (array[i] == j ){
                return i;
            }
        }
        return -1;
    }
}

8、二分法查找代码

public static int binarySearch2(int[] array, int i) {
        int begin = 0;
        int end = array.length-1;
        //开始元素下标在结束元素的左边就有机会循环,直到两者相等
        while (begin <= end){
            int mid = (begin + end)/2;
            if (array[mid] == i){
                return mid;
            }else if (array[mid] < i){
                begin = mid + 1;
            }else {
                end = mid - 1;
            }
        }
        return -1;
    }
9、数组工具类
    排序方法sort:
         Arrays.sort(array);//Arrays均为静态方法,使用类名.调用
         Arrays.sort(byte[] a, int fromIndex, int toIndex)//指定范围排序
    二进制查找:
        Arrays.binarySearch(int[] a, int key);
        Arrays.binarySearch(int[] a, int fromIndex, int toIndex, int key)//指定范围内查找
    按字典顺序比较:
        compare(int[] a, int[] b)//暂且不看
int[] arr = {12,23,323,4545,232,32,1235,55,765,44};
        Arrays.sort(arr);//升序排序
        int index = Arrays.binarySearch(arr,44);
        System.out.println(index);//3,返回查找值的下标

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值