数组与集合 -- 数组

来源:互联网 发布:python 求指数 编辑:程序博客网 时间:2024/06/10 02:43

数组在Java中是一种引用数据类型,也是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性序列,这使得访问非常快速。但是这种速度所付出的代价就是数据对象的大小被固定

数组的创建与初始化

1.静态初始化:在数组定义的同时,并初始化。

int[] arr = {1,2,3,4,5};

2.动态初始化:将数组的定义和初始化分开。

int[] arr = new int[10];for (int i = 0; i < arr.length; i++){    arr[i] = i+1;}

注意问题:

数组元素的索引必须小于数组的长度,否则会发生数组越界异常问题(ArrayOutOfBoundsException)

补充:
增强for循环即for-each:可以遍历数据与集合,缺点是无法访问索引值

for (int value : arr){    System.out.println(value);}

数组的常用排序和查找:

排序

  • 冒泡排序法:
    基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当相邻的数比较后,发现它们的排序要求相反时,就将它们互换。
    /**     * 冒泡排序     * @param arr 将要排序的数组     */    public static void bubbleSort(int[] arr){        //外层for循环代表比较的轮数        for (int i = 1; i < arr.length; i++) {            //内层for循环代表每轮比较的次数            for (int j = 0; j < arr.length-i; j++) {                if (arr[j] > arr[j+1]) {//互换                    int temp;                    temp = arr[j];                    arr[j] = arr[j+1];                    arr[j+1] = temp;                }            }        }    } 
  • 选择排序法:

    将数组分成两部分,一部分是已经排好序的,另一部分是无序的,每次在无序的数组中找到最小值,然后将这个最小值放到已排好序部分的最后面。

/**     * 选择排序     * @param arr 将要排序的数组     */    public static void selectSort(int[] arr){        //外层for循环代表比较的轮数        for (int i = 0; i < arr.length; i++) {            //内层for循环代表每轮比较的次数            for (int j = i+1; j < arr.length; j++) {                if (arr[i] > arr[j]) {//互换                    int temp;                    temp = arr[i];                    arr[i] = arr[j];                    arr[j] = temp;                }            }        }    }
  • 插入排序法:

基本思想:将数组分成两部分,每次从后面那部分中取出索引最小的元素插入到前一部分的适当位置

/**     * 插入排序     * @param arr 将要排序的数组     */    public static void insertSort(int[] arr){        for (int i = 0; i < arr.length; i++) {            int temp = arr[i];//保存i索引对应的元素值            int j = i;//保存i的下标            while (j > 0 && temp < arr[j-1]) {                arr[j] = arr[j-1];                j--;            }            arr[j] = temp;        }    }

查找

  • 顺序法查找:

基本思想:从第一个元素开始,顺序比较查找

    /**     * 顺序查找     * @param arr 查询的数组     * @param num 查询的元素     * @return     */    public static int orderSe(int[] arr, int num) {        for (int i = 0; i < arr.length; i++) {            if (arr[i] == num) {                return i;            }        }        return -1;    }
  • 二分法查找:

前提条件:从已排好序的数组中查找
基本思想:
1、首先确定该查找区间的中间位置
2、若中间点位置值大于待查找值,则新的查找区间是中间点位置的左边区域,若中间点位置值小于待查找值,则新的查找区间是中间点位置的右边区域,下一次查找区间是针对新的查找区间进行的

    /**     * 二分法查找     * @param arr 查询的数组     * @param num 查询的元素     * @return     */    public static int binarySearch(int[] arr, int num){        int low = 0;//起点:判断范围的上限        int upper = arr.length -1;//终点:判断范围的下限        while (low <= upper) {            int middle = (low + upper) / 2;//中间值            if (arr[middle] < num) {                low = middle + 1;            }else if (arr[middle] > num){                upper = middle -1;            }else {                return middle;            }        }        return -1;    }
0 0
原创粉丝点击