JAVA数组进阶

Arrays数组工具类

        工具类 特点: 只提供一个私有的无参构造      --- 无法new出对象

                     所有的方法都被static修饰      --- 可以通过类名直接调用

        工具类中提供的方法:

        void rangeCheck(int arrayLength, int fromIndex, int toIndex) : 校验数组索引范围是否合法

        void sort(int[] a) : 将数组a默认升序排序

        int binarySearch(int[] a, int key) : 使用二分查找算法查key在数组a中的索引并返回

        boolean equals(int[] a, int[] a2) : 比较数组a和a2是否相同

        void fill(int[] a, int val) : 将元素val填充到数组a

        int[] copyOf(int[] original, int newLength)  : 从original数组的0号索引位置开始拷贝,拷贝newLength个到新数组中并返回新数组

        int[] copyOfRange(int[] original, int from, int to) : 拷贝original中[form,to) 索引范围内的元素到新数组并返回

        List<T> asList(T...  a)  : 将可变参数(数组) 转为集合

        String toString(int[] a) : 将数组a 拼接成字符串返回      ---> "[1,2,3,4,5]"

线性查找

          int[] arr = {3, 8, 1, 5, 2, 7, 4, 6, 9};使用线性查找出:元素5在数组中的索引位置

          优点: 思路简单

          缺点: 性能不稳定

二分查找

      引入: 使用二分查找发查出元素5在数组中的索引位置

            int[] arr = {1,2,3,4,5,6,7,8,9,10};

      使用二分查找的前提条件:数组 + 有序

             1. 使用长度确定之后不可变的容器: 数组

             2. 元素必须有序: 从小到大,从大到小

数组的算法

       -- 排序类:

             1. 冒泡排序:

             2. 选择排序:

            冒泡排序

                  从小到大: 相邻两个元素做比较,如果上一个元素大于下一个元素,则交换位置。

                  从大到小: 相邻两个元素做比较,如果上一个元素小于下一个元素,则交换位置。

            需求: 使用冒泡排序,将数组:{3,5,4,2,1} 中元素从小到大排序

            需求: 使用冒泡排序,将数组:{18,57,2,55,32,10,9,6,12} 中元素从小到大排序

            明确: 先不考虑代码优化

            总结:不考虑优化

                1. 使用for循环确定循环轮数: arr.length-1轮

                2. 使用for循环确定每一轮比较的次数:   arr.length-1 - i次

                3. 判断 arr[j] 和arr[j+1]大小

                4. 交换 arr[j] 和arr[j+1]的位置

           代码优化:

                 1. 减少每一轮比较的次数   : 内层循环次数变为:arr.length-1 - i次

                 2. 减少排序的轮数  :

选择排序

          需求: 使用选择排序,将数组:{3,5,4,2,1} 中元素从小到大排序

          需求: 使用选择排序,将数组:{3,5,4,2,1} 中元素从大到小排序

           总结:

               1. 确定排序的轮数: arr.length-1    循环变量i [0, arr.length-2]

               2. 求出[i,arr.length-1]索引范围内的最小值的位置:index

               3. 交换arr[index] 和 arr[i]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值