Java Array与Arrays

一、数组类Array

  • Java中最基本的一个存储结构。
  • 提供了动态创建和访问Java数组的方法。其中的元素的类型必须相同。
  • 效率高,但容量固定且无法动态改变。
  • 它无法判断其中实际存有多少元素,length只是告诉我们array的容量。

二、静态类Arrays

  • 此静态类专门用来操作array,提供搜索、排序、复制等静态方法。
  • equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
  • sort():用来对array进行排序。
  • binarySearch():在排好序的array中寻找元素。
  • Arrays.asList(array):将数组array转化为List(此种方法不正规)

1 toString()打印数组

int arr[] = {1,3,5,2,9};
String arrString = Arrays.toString(arr);/
System.out.println(arrweString);

2 fill()填充数组

		int[] arr1 = new int[4];
        int[][] arr2 = new int[4][4];
        Arrays.fill(arr1, 1); //填充一维数组
        for (int[] value : arr2) { //填充二维数组
            Arrays.fill(value, 1);
        }
        System.out.println(Arrays.toString(arr1));
        System.out.println("============");
        for (int[] ints : arr2) {
            System.out.println(Arrays.toString(ints));
        }

3 equals()比较数组元素是否相等

		int[] arr3 = new int[]{1, 2, 3, 4};
        int[] arr4 = new int[]{1, 2, 3, 4};
        int[] arr5 = new int[]{1, 2, 3, 5};
        System.out.println("============");
        System.out.println("arr3和arr4是否相等?"+Arrays.equals(arr3, arr4));
        System.out.println("arr3和arr5是否相等?"+Arrays.equals(arr3, arr5));

注:如果是arr3.equals(arr4),则返回false,因为equals比较的是两个对象的地址,不是里面的数。
而Arrays.equals重写了equals,所以,这里可以比较数组中的元素是否相等。

4 asList()数组转列表

 		String[] arr6 = {"aa", "bb", "cc"};
        Integer[] arr7 = {1, 2, 3, 5}; //注意这里不能用int
        List<String> list1 = Arrays.asList(arr6);
        List<Integer> list2 = Arrays.asList(arr7);
        //list1.add("c"); UnsupportedOperationException
        //推荐写法:将asList返回的对象转换为List对象
        String[] arr8 = {"a", "b", "c"};
        List<String> list3 = new ArrayList<>(Arrays.asList(arr8));
        list3.add("d"); //正常使用
        System.out.println(list3);

注:asList()方法把数组转换成集合时,不能使用其修改集合相关的方法,如果使用修改集合相关的方法add/remove/clear方法会抛出java.lang.UnsupportedOperationException的异常。原因是这个ArrayList是Arrays的内部类,ArrayList虽然实现了List接口,但是并没有重写add和remove方法,重写了get和set等方法。

Java中List转换为数组,数组转List
List转换为Array可以这样处理:

ArrayList<String> list=new ArrayList<String>();

String[] strings = new String[list.size()];

list.toArray(strings);

反过来,如果要将数组转成List怎么办呢?如下:

String[] s = {"a","b","c"};
List list = java.util.Arrays.asList(s);

5 copyOf()和copyOfRange()拷贝数组

		String[] arr9 = {"a1", "b1", "c1"};
        String[] arr10 = Arrays.copyOf(arr9, arr9.length); //参数1是原数组,参数2是新数组长度,多的用null补全
        String[] arr11 = Arrays.copyOfRange(arr9, 0, 1); //拷贝数组的某个范围
        System.out.println(Arrays.toString(arr10)); //[a1, b1, c1]
        System.out.println(Arrays.toString(arr11)); //[a1]

6 sort()数组排序

6.1 数字排序

    int[] intArray = new int[] { 4, 1, 3, -23 };
    Arrays.sort(intArray);//输出: [-23, 1, 3, 4]

6.2 字符串排序,先大写后小写

    String[] strArray = new String[] { “z”, “a”, “C” };
    Arrays.sort(strArray);//输出: [C, a, z]

6.3 严格按字母表顺序排序,也就是忽略大小写排序 Case-insensitive sort

    Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);//输出: [a, C, z]

6.4 反向排序, Reverse-order sort

    Arrays.sort(strArray, Collections.reverseOrder());//输出:[z, a, C]

6.5 选择数组指定位置进行排序

    int[] arr = {3,2,1,5,4};
    Arrays.sort(arr,0,3);//给第0位(0开始)到第3位(不包括)排序
    String str = Arrays.toString(arr); // Arrays类的toString()方法能将数组中的内容全部打印出来
    System.out.print(str);//输出:[1, 2, 3, 5, 4]

6.6 使用比较器自定义排序,适用于多个比较维度

Integer[] arr12 = {11, 21, 33, -55, 44};
Arrays.sort(arr12, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1; //倒序   升序:o1-o2
            }
        });

7 binarySearch() 二分查找法找指定元素的索引(下标)

 前提:数组一定是排好序的,否则会出错。如果有重复元素则返回最后一个元素的下标。


	int[] arr = {10,20,30,40,50};
	System.out.println(Arrays.binarySearch(arr, 30)); //输出:2 (下标索引值从0开始)
	System.out.println(Arrays.binarySearch(arr, 36));//输出:-4 (找不到元素,返回-x,从-1开始数,如题,返回-4)
	System.out.println(Arrays.binarySearch(arr, 0,3,30));//输出:2 (从0到3位(不包括)找30,找到了,在第2位,返回2)
    System.out.println(Arrays.binarySearch(arr, 0,3,40));//输出:-4 (从0到3位(不包括)找40,找不到,从-1开始数,返回-4)
  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值