操作数组的工具类Arrays

首先要导包:
import java.util.Arrays;

排序

//1.sort排序String[]数组:升序:从小到大
String[] names = { "Liz", "John", "Eric", "Alan" };
//只排序前两个
//[John, Liz, Eric, Alan]
Arrays.sort(names, 0, 2);
//全部排序
//[Alan, Eric, John, Liz]
Arrays.sort(names);
String [] name = {"li","ad","sf","qw"};
Arrays.sort(name);

当然,这里的排序也可以是自定义排序,有两种方式,一种是要比较的类实现Comparable接口:

import java.util.Arrays;

public class Employee implements Comparable<Employee> {
  String name;
  double salary;

  public Employee(String name, double salary) {
    this.name = name;
    this.salary = salary;
  }

  public int compareTo(Employee other) {
    return Double.compare(salary, other.salary);
  }

  public static void main(String[] args) {
    Employee[] staff = new Employee[4];
    staff[2] = new Employee("Carl Cracker", 75000);
    staff[3] = new Employee("Tony Tester", 38000);
    staff[0] = new Employee("Harry Hacker", 35000);
    staff[1] = new Employee("Harry Hacker2", 35000);
    Arrays.sort(staff);
    for (Employee e : staff) {
      System.out.println("name=" + e.name + " , salary=" + e.salary);
    }
  }
}

输出结果为:
name=Harry Hacker , salary=35000.0
name=Harry Hacker2 , salary=35000.0
name=Tony Tester , salary=38000.0
name=Carl Cracker , salary=75000.0

另一种是新建一个比较器类专门比较该类,该类实现了Comparator接口

如: 需要按照字符的长度递增来进行排序,这里用到了函数式编程写法:

import java.util.Arrays;
import java.util.Comparator;

public class Test {
  public static void main(String[] args) {
    String[] friends = {"Peter", "Paulllll", "Mary"};
    Arrays.sort(friends, Comparator.comparingInt(String::length));

    for (String f : friends) {
      System.out.print(f + " ");
    }
  }
}

输出结果为:
Mary Peter Paulllll

返回固定大小的List

//2.使用该方法可以返回一个固定大小的List,如:
List str= Arrays.asList(“welcome”,“to”,“fsdg”);
List intList = Arrays.asList(1, 2, 3, 4);

打印一维数组

//3.toString()方法:方便我们打印出数组的内容。
int[] ,String[],long[],boolean[]…
System.out.println(Arrays.toString(name));
System.out.println(Arrays.toString(a));

打印二维数组

//4.deepToString:方法:打印二维数组;
int[][] twoD={{1,2,3,4},{3,6,7,8}};
System.out.println(Arrays.deepToString(twoD));

比较两个一维数组内容是否相等

//5.equals:方法:使用Arrays.equals().来比较1维数组是否相等。
String[] names1 = { “Eric”, “John”, “Alan”, “Liz” };
String[] names2 = { “Eric”, “John”, “Alan”, “Liz” };
System.out.println(Arrays.equals(names1,names2));
注意正确重写equals方法。

比较两个二维数组内容是否相等

//6.Arrays.deepEquals能够去判断更加复杂的数组是否相等。
int[][] stuGrades1 = { { 80, 81, 82 }, { 84, 85, 86 }, { 87, 88, 89 } };
int[][] stuGrades2 = { { 80, 81, 82 }, { 84, 85, 86 }, { 87, 88, 89 } };
System.out.println(Arrays.deepEquals(stuGrades1, stuGrades2));

填充数组

//7.fill()方法,用某个数组填充数组。
int[] array1 = new int[8];
Arrays.fill(array1, 1);
//[1, 1, 1, 1, 1, 1, 1, 1]
System.out.println(Arrays.toString(array1));
Arrays.fill(array1, 3);
System.out.println(Arrays.toString(array1));

折半查找元素

//8. binarySearch方法 :折半查找法 ,返回所给元素的索引
//- 用法:
//- //fromIndex,toIndex这两个参数可以省略(表示整个数组)
//不省略表示在这个区间查找,左闭右开, key 表示要查找的元素
//返回要查找元素的 索引位置
int index = Arrays.binarySearch(new int[] { 1, 2, 3, 4, 5, 6, 7 }, 6);
public static int binarySearch(byte[] a, int fromIndex, int toIndex, byte key)

如果没有找到,则返回插入位置的相反数,太棒了!

public class Hello {
    public static void main(String[] args) {
        int[] arr = {1, 3, 5};
        System.out.println(Arrays.binarySearch(arr, 4));
    }
}
// 输出 -3 (说明:插入在第三个位置,注意和索引间的转换)

拷贝数组

//9. copyOf及copyOfRange方法 :将一个数组拷贝到另一个数组中/或者其中//的一部分

//索引都是从零开始

String[] names2 = { "Eric", "John", "Alan", "Liz" };
//[Eric, John, Alan]
String[] copy = Arrays.copyOf(names2, 3); 
//[Alan, Liz]   ,左闭右开
String[] rangeCopy = Arrays.copyOfRange(names2, 2, names2.length);

Arrays中的Arraylist和ArrayList的区别

List integers = Arrays.asList(1, 2, 3, 4);
在日常操作中,我们通常都会使用add和remove方法对List的元素进行管理。如

integers.add(5);
integers.remove(1)
这时就出现了异常:java.lang.UnsupportedOperationException
原因:Arrays.asList()返回了一个定长的list, 这个方法充当array系列API和collection系列API之间的桥梁。所以说,返回值,只是数组简单包装而成的List而已,并不能改变其长度。

不过没有关系,我们可以用ArrayList的构造方法,来创建一个新的ArrayList,然后再进行增删操作。

Integer[] ints = {1, 2, 3, 4};
ArrayList integers = new ArrayList<>(Arrays.asList(ints));
integers.add(5);

假ArrayList: java.util.Arrays$ArrayList
真ArrayList: java.util.ArrayList

Arrays.asList(T… a)中返回的ArrayList是Arrays的内部类,继承了AbstractList。所以说调用add方法的时候,其实调用了父类AbstractList的方法,方法源码如下:(假ArrayList)

public void add(int index, E element) {
throw new UnsupportedOperationException(); //直接抛出了异常。
}

真ArrayList
我们通常用的ArrayList,继承了AbstractList,并重写了add, remove等方法,

public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }

public E remove(int index) {
      rangeCheck(index)
      modCount++;
      E oldValue = elementData(index)
      int numMoved = size - index - 1;
      if (numMoved > 0)
          System.arraycopy(elementData, index+1, elementData, index,
                           numMoved);
      elementData[--size] = null; // clear to let GC do its wor
      return oldValue;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值