Arrays 类学习笔记

目录

一、定义

二、常用方法

1、Arrays.sort()排序

2、Arrays.sort()部分排序

3、Arrays.asList(T...a)方法

4、Arrays.toString(int[] a)

5、Arrays.fill(Objects, Object)

6、Arrays.equals()

7、Arrays.binarySearch()

8、Arrays.binarySearch()


一、定义

Arrays类位于 java.util 包中,有关数组的一些操作

使用时的包:

import java.util.Arrays

二、常用方法

1、Arrays.sort()排序

1)方法

public static void sort(T[] a)

2)使用(默认升序排序)

        int a[] = new int[]{15, 4, 3, 5, 7, 1};
        System.out.print("排序前:");
        for (int i : a) {
            System.out.print(i + " ");
        }
        System.out.println();
        Arrays.sort(a);
        System.out.print("排序后:");
        for (int i : a) {
            System.out.print(i + " ");
        }
        System.out.println();

3)结果

排序前:15 4 3 5 7 1 
排序后:1 3 4 5 7 15 

4)降序

降序需用到 Collections.reverseOrder(),但需使用基本类型的包装类

        Integer a[] = new Integer[]{15, 4, 3, 5, 7, 1};
        System.out.print("排序前:");
        for (Integer i : a) {
            System.out.print(i + " ");
        }
        System.out.println();
        Arrays.sort(a,Collections.reverseOrder());
        System.out.print("排序后:");
        for (Integer i : a) {
            System.out.print(i + " ");
        }
        System.out.println();



        排序前:15 4 3 5 7 1 
        排序后:15 7 5 4 3 1 

2、Arrays.sort()部分排序

1)方法

// fromIndex是指数组的下标,如fromIndex=1,则表示数组的第二个元素
// toIndex是指数组的第几个元素,如toIndex=3,则表示数组的第三个元素,数组的下标是2
public static void sort(int[] a, int fromIndex, int toIndex)

2)使用

        int a[] = new int[]{15, 4, 3, 2, 7, 1};
        System.out.print("排序前:");
        for (int i : a) {
            System.out.print(i + " ");
        }
        System.out.println();
        Arrays.sort(a,1,3);
        System.out.print("排序后:");
        for (int i : a) {
            System.out.print(i + " ");
        }
        System.out.println();

3)结果

排序前:15 4 3 5 7 1 
排序后:15 3 4 5 7 1 

3、Arrays.asList(T...a)方法

1)方法:将数组转为List

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

2)使用(基本类型需使用包装类)

Integer a[] = new Integer[]{15, 4, 3, 2, 7, 1};
Arrays.asList(a);
System.out.println(Arrays.asList(a).contains(1));

3)结果

true

4)说明

生成的List不能进行add()操作,使用的是内部ArrayList类生成的集合,源码如下

  private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
    {
        private static final long serialVersionUID = -2764017481108945198L;
        private final E[] a;

        ArrayList(E[] array) {
            a = Objects.requireNonNull(array);
        }

        @Override
        public int size() {
            return a.length;
        }

        @Override
        public Object[] toArray() {
            return a.clone();
        }

        @Override
        @SuppressWarnings("unchecked")
        public <T> T[] toArray(T[] a) {
            int size = size();
            if (a.length < size)
                return Arrays.copyOf(this.a, size,
                                     (Class<? extends T[]>) a.getClass());
            System.arraycopy(this.a, 0, a, 0, size);
            if (a.length > size)
                a[size] = null;
            return a;
        }

        @Override
        public E get(int index) {
            return a[index];
        }

        @Override
        public E set(int index, E element) {
            E oldValue = a[index];
            a[index] = element;
            return oldValue;
        }

        @Override
        public int indexOf(Object o) {
            E[] a = this.a;
            if (o == null) {
                for (int i = 0; i < a.length; i++)
                    if (a[i] == null)
                        return i;
            } else {
                for (int i = 0; i < a.length; i++)
                    if (o.equals(a[i]))
                        return i;
            }
            return -1;
        }

        @Override
        public boolean contains(Object o) {
            return indexOf(o) != -1;
        }

        @Override
        public Spliterator<E> spliterator() {
            return Spliterators.spliterator(a, Spliterator.ORDERED);
        }

        @Override
        public void forEach(Consumer<? super E> action) {
            Objects.requireNonNull(action);
            for (E e : a) {
                action.accept(e);
            }
        }

        @Override
        public void replaceAll(UnaryOperator<E> operator) {
            Objects.requireNonNull(operator);
            E[] a = this.a;
            for (int i = 0; i < a.length; i++) {
                a[i] = operator.apply(a[i]);
            }
        }

        @Override
        public void sort(Comparator<? super E> c) {
            Arrays.sort(a, c);
        }
    }

4、Arrays.toString(int[] a)

1)方法:将数组转为String输出

// T为int,double等基本类型,还有Object
public static String toString(T[] a) 

2)使用和结果

Integer a[] = new Integer[]{15, 4, 3, 2, 7, 1};
System.out.println(Arrays.toString(a));


[15, 4, 3, 2, 7, 1]

5、Arrays.fill(Objects, Object)

1)方法

// T为int,double等基本类型,还有Object
// 将指定的 val引用分配给指定的 a 数组的每个元素。
public static void fill(long[] a, long val) 

2)使用和结果

int a[] = new int[]{15, 4, 3, 2, 7, 1};
System.out.print("前:");
for (int i : a) {
    System.out.print(i + " ");
}
System.out.println();
Arrays.fill(a, 20);
System.out.print("后:");
for (int i : a) {
    System.out.print(i + " ");
}
System.out.println();


前:15 4 3 2 7 1 
后:20 20 20 20 20 20 

6、Arrays.equals()

1)方法

// 用于对比两个数组是否相等,对应下标的对应元素是否全部相等
public static boolean equals(int[] a, int[] a2)

2)使用和结果

int a[] = new int[]{15, 4, 3, 2, 7, 1};
int b[] = new int[]{15, 4, 3, 2, 1, 7};
System.out.println(Arrays.equals(a, b));



false

7、Arrays.binarySearch()

1)方法

// 二分查找,对有序的数组查询元素,存在返回元素下标,不存在返回小于0的数
public static int binarySearch(int[] a, int key)

2)使用和结果

int a[] = new int[]{15, 4, 3, 2, 7, 1};
Arrays.sort(a);
System.out.println(Arrays.binarySearch(a, 2));
System.out.println(Arrays.binarySearch(a, 5));



1
-5

8、Arrays.binarySearch()

1)方法

// 二分查找,在有序的数组指定范围内查询元素,存在返回元素下标,不存在返回小于0的数
// fromIndex数组下标,toIndex数组的第几个元素
public static int binarySearch(int[] a, int fromIndex, int toIndex, int key)

2)使用和结果

int a[] = new int[]{15, 4, 3, 2, 7, 1};
Arrays.sort(a);
System.out.println(Arrays.binarySearch(a, 1, 5, 2));

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值