zoukankan      html  css  js  c++  java
  • Java中Arrays Api使用

    Arrays APi

    在日常使用Java数组的过程中,会经常使用到一些扩容排序搜索等操作。

    准备

    创建一个整数数组:
    int[] ints = new int[]{3,4,2,3,5,6,1,5};

    排序

    Arrays.sort(ints);  // 内部排序
    System.out.println(Arrays.toString(ints));  //[1, 2, 3, 3, 4, 5, 5, 6]
    

    复制

    ints = Arrays.copyOf(ints, ints.length + 1);  // 扩容
    ints[ints.length - 1] = 7;
    System.out.println("Arrays.toString(ints) = " + Arrays.toString(ints)); // [1, 2, 3, 3, 4, 5, 5, 6, 7],增加了容量
    

    二分搜索

    存在则返回随机一个索引,不存在则返回搜索结果的low指针对应的下标 + 1后的负值。源码如下:

    private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                         int key) {
            int low = fromIndex;
            int high = toIndex - 1;  // toIndex不包含在搜索内容中
    
            while (low <= high) {
                int mid = (low + high) >>> 1;
                int midVal = a[mid];
    
                if (midVal < key)
                    low = mid + 1;
                else if (midVal > key)
                    high = mid - 1;
                else
                    return mid; // key found
            }
            return -(low + 1);  // key not found.
        }
    

    使用代码:

    System.out.println("Arrays.binarySearch(ints, 2) = " + Arrays.binarySearch(ints, 2)); // Arrays.binarySearch(ints, 2) = 1
    int i = Arrays.binarySearch(ints, 8); // 没找到 -(low + 1);
    System.out.println(i); // 返回 -(9 + 1)= -10;
    

    填充默认值

    在某些场景下,我们希望数组的初始值可以自定义,所以可以使用 fill 函数去实现,注意,只能对一维数组进行操作,如果是二维数组,那么把它当作数组的元素是数组,使用一层循环,然后对每个数组进行填充自定义的值。

    Arrays.fill(ints2, 2); // 填充默认值
    System.out.println("Arrays.toString(ints2) = " + Arrays.toString(ints2));
    
    

    比较两个数组是否相等

    不能直接用等于,也可以使用数组自带的equals方法,但推荐使用 Arrays.equals()方法可以自行比较。

    int[] ints2 = new int[]{1,2,3};
            System.out.println("Arrays.equals(ints, ints2) = " + Arrays.equals(ints, ints2));  // false, 判断两个数组是否相等。
    

    将数组转换为List

    第一种方式
    List<Integer> integers = Arrays.asList(1, 2, 3, 4);

    这种方式虽然可以使用,但是生成的List为内部类,而不是java.utils下的ArrayList,不能对该list进行添加,删除等操作。

    第二种方式
    List<Integer> collect = Arrays.stream(ints).boxed().collect(Collectors.toList());

    这种方式生成的就是正常的List,还可以在生成流之后对该流进行一系列的操作,强烈推荐这种方式

    待续。。。

  • 相关阅读:
    CocoaPods使用详细说明
    cocoapod使用
    Android-利用LinearGradient实现文字一闪一闪
    Android5.0 CheckBox颜色修改
    android实现文字渐变效果和歌词进度的效果
    Ceph 常规操作笔记
    Git版本控制器使用总结性梳理
    CentOS 7.5 部署 MySQL 5.7 基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)
    Ansible-playbook 运维笔记
    Docker容器基础介绍
  • 原文地址:https://www.cnblogs.com/hnxbp/p/15026868.html
Copyright © 2011-2022 走看看