Java Arrays工具类

Java中对数组专门封装了一个工具类Arrays,在平时编程用到的比较多,这里整理下

  • asList(arr):返回由指定数组支持的固定大小的列表
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArraysToolsDemo {
    public static void main(String[] args) {
        /********asList:数组转集合********/
        //第一种方法
        String[] arr={"Java","is","beautiful"};
        List<String> list1=new ArrayList<>(Arrays.asList(arr));
        System.out.println(list1);
        //第二种方法
        String[] name = new String[]{"12","14","sdf","2d"};
        List<String> list2 = Arrays.asList(name);
        System.out.println(list2);
        //集合转回数组 Arrays.toString
        List<String> list3=new ArrayList<String>();
        list3.add("Java");
        list3.add("is");
        list3.add("Grace");
        /********ArrayList toArray:集合转数组********/
        //第一种方法
        String[] s1=list3.toArray(new String[0]);
        for (String i:s1){
            System.out.print(i+" ");
        }
        //第二种方法
        String[] s2=new String[list3.size()];
        list3.toArray(s2);
        for (String i:s2){
            System.out.print(i+" ");
        }
    }
}
  • sort(arr):将指定的数组按照升序排列,无返回值
import java.util.Arrays;
import java.util.List;

public class ArraysToolsDemo {
    public static void main(String[] args) {
        /********sort:升序排序,无返回值*******/
        Integer[] a=new Integer[]{1,2,4,5,61,1,1,2,32,123,1,34,4};
        Arrays.sort(a);
        List<Integer> list4 = Arrays.asList(a);
        System.out.println(list4);
    }
}
  • binarySearch():使用二进制算法在指定数组中搜索指定值,这里指定数组必须是有序的
import java.util.Arrays;
import java.util.List;

public class ArraysToolsDemo {
    public static void main(String[] args) {
        /********binarySearch:返回指定数组搜索指定下标*******/
        Integer[] a=new Integer[]{12,55,7,3,999,0,78};
        //无序数组下标error
        int indexerror=Arrays.binarySearch(a,55);
        Arrays.sort(a);
        //排序数组下标
        int index=Arrays.binarySearch(a,3);
        List<Integer> list4 = Arrays.asList(a);
        System.out.println(list4);
        System.out.println(index);
        System.out.println(indexerror);
    }
}
  • equals():判断两个数组是否相等,返回boolean值,比较的参数需要相同类型
import java.util.Arrays;
import java.util.List;

public class ArraysToolsDemo {
    public static void main(String[] args) {
        /********equals:判断数组是否相等********/
        Integer[] a=new Integer[]{1,2,3};
        Integer[] b=new Integer[]{1,2,3};
        int[] c=new int[]{1,2,3};
        int[] f=new int[]{2,3};
        Integer[] d=new Integer[]{1};
        List<Integer> list4 = Arrays.asList(a);
        System.out.println(list4);
        System.out.println("a==b: "+Arrays.equals(a,b));
        System.out.println("c==f: "+Arrays.equals(c,f));
        System.out.println("a==d: "+Arrays.equals(a,d));
    }
}
  • fill():填充,无返回值,填充后值相同
import java.util.Arrays;
import java.util.List;

public class ArraysToolsDemo {
    public static void main(String[] args) {
        /********fill:填充*************/
        Integer[] a=new Integer[]{1,2,3};
        Arrays.fill(a,1313);
        List<Integer>list=Arrays.asList(a);
        System.out.println(list);
        /********toString()************/
        System.out.println(Arrays.toString(a));
    }
}
  • toString():返回指定数组内容的字符串表示,见上面
  • copyOf():复制指定数组指定长度
import java.util.Arrays;
import java.util.List;

public class ArraysToolsDemo {
    public static void main(String[] args) {
        /********System.arraycopy()*************/
        //elementData:源数组;index1:源数组中的起始位置;elementData:目标数组;index2:目标数组中的起始位置; length:要复制的数组元素的数量;
        //System.arraycopy(elementData, index1, elementData, index2 , length);
        //复制的长度不可以越界,否则会报错
        int[] a=new  int[]{1,2,3,4};
        int[] b=new int[10];
        System.arraycopy(a,2,b,3,2);
        System.out.println(Arrays.toString(b));
        /********Arrays.copyOf()***********************/
        String[] s=new String[]{"java","hei","sss","skdjfls"};
        String[] str=Arrays.copyOf(s,8);
        List<String>list=Arrays.asList(str);
        System.out.println(list);
    }
}

如有不正之处欢迎讨论指正

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2019.12.14 更新

  • 举例 原生数据类型的数据的数组无法作为asList的参数,如果是参数,则返回数组对象本身
  • 举例 基本数据类型数组如 int[] 转换为集合
  • 举例 asList是返回指定数组生成的固定大小的List,不是java.util.ArrayList,而是java.util.Arrays的一个内部类,用final数组来保存元素
  • 举例 int[] 数组转List    List<Integer> arrlist= Arrays.stream(arrint).boxed().collect(Collectors.toList())
  • 举例 List转 int[] 数组 lst.stream().mapToInt(i->i).toArray()
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class AsList {
    public static void main(String[] args) {
        /********asList:数组转集合********/
        //第一种方法
        String[] arr = {"Java", "is", "beautiful"};
        List<String> list1 = new ArrayList(Arrays.asList(arr));
        list1.add("sss");
        System.out.println(list1);

        // 原生数据类型的数据的数组无法作为AsList的参数 T 是数组元素的 class,原生数据类型没有class属性
        int[] arrint = {1, 2, 3};
        List lstint = Arrays.asList(arrint);
        System.out.println(lstint); // [[I@4554617c] 返回对象本身

        // 对于基本数据类型数组如何转换为集合;这里指的是 int[] 转为List<Integer> 目前只发现下面一种直接的方法
        // java8及以上版本
        // List<Integer> arrlist= Arrays.stream(arrint).boxed().collect(Collectors.toList());
        // stream转换成IntStream boxed装箱 再转换成Stream<Integer> 在再用Stream的 collect()

        // 包装类数组可以用asList
        Integer[] arrinteger={1,2,3};
        List lstinteger = Arrays.asList(arrinteger);
        System.out.println(lstinteger); // 返回整型数组

        //第二种方法
        String[] name = new String[]{"12", "14", "sdf", "2d"};
        List<String> list2 = Arrays.asList(name);
        // asList是返回指定数组生成的固定大小的List,不是java.util.ArrayList,而是java.util.Arrays的一个内部类,用final数组来保存元素
        // list2.add("222");
        System.out.println(list2);
        // 所以要创建一个真正的ArrayList
        List<String>list2tmp=new ArrayList<String>(Arrays.asList(name));
        list2tmp.add("222");
        System.out.println(list2tmp);

        //集合转回数组 Arrays.toString
        /********ArrayList toArray:集合转数组********/
        // lst.stream().mapToInt(i->i).toArray();
        List<String> list3 = new ArrayList<String>();
        list3.add("Java");
        list3.add("is");
        list3.add("Grace");

        List<Integer> list4=new ArrayList<Integer>();
        list4.add(2);
        list4.add(4);
        // list4.stream().mapToInt(i->i).toArray();
        // 先转成stream

        //第一种方法
        // 0是了为了节省空间,只是说明了返回类型,可以是Integer可以是String
        // 相对于下面的,这种是目前最推荐的一种用法
        String[] s1 = list3.toArray(new String[0]);
        for (String i : s1) {
            System.out.print(i + " ");
        }
        // List<Integer>转int[] 无法采用此方法,必须采用lst.stream().mapToInt(i->i).toArray();
        // 但是二位数组List<int[]>转int[][] 可以采用此方法
        List<int[]> lst5=new ArrayList<int[]>();
        int[] test1=new int[]{1,2};
        int[] test2=new int[]{4,5};
        int[] test3=new int[]{9,9,2,3};
        lst5.add(test1);
        lst5.add(test2);
        lst5.add(test3);
        int[][] test6=lst5.toArray(new int[0][]);
        for (int[] test7:test6){
            for (int test8:test7){
                System.out.println(test8);
            }
        }
        System.out.println();
        //第二种方法
        String[] s2 = list3.toArray(new String[list3.size()]);
        for (String i : s2) {
            System.out.print(i + " ");
        }
    }
}
[Java, is, beautiful, sss]
[[I@4554617c]
[1, 2, 3]
[12, 14, sdf, 2d]
[12, 14, sdf, 2d, 222]
Java is Grace 1
2
4
5
9
9
2
3

Java is Grace 
Process finished with exit code 0

 

  • 举例 char数组转换为String ,用String.valueof;
  • 举例 Arrays.toString(temp) 返回指定数组内容的字符串表示形式,作用是用来很方便地输出数组,而不用一个一个地输出数组中的元素
        char[] temp={'s','g'};
        System.out.println(String.valueOf(temp));
        String res=Arrays.toString(temp);
        System.out.println(res);
        System.out.println("sg");
        System.out.println(Arrays.toString(temp));
sg
[s, g]
sg
[s, g]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值