一、基本介绍
Arrays 里面包含了一系列的静态方法,用于管理或操作数组(比如排序和搜索)
二、Arrays类常见方法
1、toString:返回数组的字符串形式??
public class AttaysMethod01 {
public static void main(String[] args) {
Integer[] arr = {1, 9, 4};
//直接使用 Arrays.toString() 显示数组
System.out.println(Arrays.toString(arr));//[1, 9, 4]
}
}
2、sort:排序(自然排序和定制排序)?
public class ArraysMethod01 {
public static void main(String[] args) {
//sort 方法
Integer[] arr = {-1, 9, 4, 0, 25};
//1.可以直接使用冒泡排序,也可以使用 Arrays.sort() 方法
//2.因为数组是引用类型,所以通过sort排序后,会影响实参arr
//Arrays.sort(arr);//默认排序方法 从小到大
//3.sort是重载的,因此也可以通过传入一个接口 Comparator 实现定制排序
Arrays.sort(arr, new Comparator() {//匿名内部类
@Override
public int compare(Object o1, Object o2) {
Integer i1 = (Integer) o1;
Integer i2 = (Integer) o2;
return i2 - i1;
}
});
System.out.println(Arrays.toString(arr));//[25, 9, 4, 0, -1]
}
}
public class ArraysSortCustom {
public static void main(String[] args) {
int[] arr = {9, 1, 0, -7, 14};
//bubble01(arr);
bubble02(arr, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
int i1 = (Integer) o1;
int i2 = (Integer) o2;
return i1 - i2;
}
});
System.out.println(Arrays.toString(arr));
}
//使用冒泡排序
public static void bubble01(int[] arr) {
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
//结合冒泡 + 定制
public static void bubble02 (int[] arr, Comparator c) {
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
//数组的排序由 c.compare(arr[j], arr[j + 1] 返回的值决定
if (c.compare(arr[j], arr[j + 1]) > 0) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
3、binarySearch:通过二分搜索法进行查找,要求必须排好序的数组
public class ArraysMethod02 {
public static void main(String[] args) {
Integer[] arr = {1, 2, 50, 70};
//binarySearch:通过二分搜索法进行查找,要求必须排好序的数组
//1.使用 binarySearch 二叉查找
//2.要求该数组是有序的, 如果是无序的 不能使用binarySearch
//3.如果数组中不存在该元素,就返回 return -(low + 1); //key not found
// low表示应该存在的位置
int index = Arrays.binarySearch(arr, 50);
System.out.println(index);//2
}
}
4、copyOf:数组元素的复制
package com.javase.arrays_;
import java.util.Arrays;
public class ArraysMethod02 {
public static void main(String[] args) {
Integer[] arr = {1, 2, 50, 70};
//copyOf:数组元素的复制
//1.从 arr 拷贝 arr.length 到newArr数组中
//2.如果拷贝的长度 > arr.length 就在新数组的后面 增加 null
//3.如果拷贝的长度 < 0 就抛出异常 NegativeArraySizeException
Integer[] newArr = Arrays.copyOf(arr, arr.length);
System.out.println(Arrays.toString(newArr));
}
}
5、fill:数组元素的填充
public class ArraysMethod02 {
public static void main(String[] args) {
//fill:数组元素的填充
//1.使用 22 填充 num 数组,也可以理解为替换原来的元素
Integer[] num = {1, 2, 3};
Arrays.fill(num, 22);
System.out.println(Arrays.toString(num));//[22, 22, 22]
}
}
6、equals:比较两个数组元素的内容是否完全一致
package com.javase.arrays_;
import java.util.Arrays;
public class ArraysMethod02 {
public static void main(String[] args) {
Integer[] arr = {1, 2, 50, 70};
//equals:比较两个数组元素的内容是否完全一致
//1.如果arr 和arr2 的元素一样 就返回true
//2.如果不是完全一样 就返回false
Integer[] arr2 = {1, 2, 50, 70};
boolean equals = Arrays.equals(arr, arr2);
System.out.println(equals);//true
}
}
7、asList:将一组值,转换成list
public class ArraysMethod02 {
public static void main(String[] args) {
//asList:将一组值,转换成list
//1.aList 方法会将 (1, 2, 3, 4) 转成一个List 集合
//返回的 编译类型 List(接口)
//返回的 运行类型 java.util.Arrays$ArrayList 是 Arrays 类的静态内部类
List aList = Arrays.asList(1, 2, 3, 4);
System.out.println(aList);
System.out.println("aList的运行类型 " + aList.getClass());
}
}
三、入门练习
自定义Book类,里面包含name和price,按price排序
使用前面学习过的传递实现 Comparator 接口匿名内部类
要求按照price 从大到小, 从小到大, 按书名长度从大到小
public class ArrayExercise {
public static void main(String[] args) {
Book[] books = new Book[5];
books[0] = new Book("西游", 50);
books[1] = new Book("三国演义", 9);
books[2] = new Book("Java从入门到放弃", 100);
books[3] = new Book("红楼梦", 66);
books[4] = new Book("水浒传108", 24);
//从大到小
Arrays.sort(books, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Book b1 = (Book) o1;
Book b2 = (Book) o2;
double d1 = b1.getPrice() - b2.getPrice();
if (d1 > 0 ){
return -1;
}else if (d1 < 0) {
return 1;
}else {
return 0;
}
}
});
System.out.println("====价格从大到小====");
for (int i = 0; i < books.length; i++) {
System.out.println(books[i]);
}
//从小到大
Arrays.sort(books, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Book b1 = (Book) o1;
Book b2 = (Book) o2;
double d1 = b1.getPrice() - b2.getPrice();
if (d1 > 0 ){
return 1;
}else if (d1 < 0) {
return -1;
}else {
return 0;
}
}
});
System.out.println("\n====价格从小到大====");
for (int i = 0; i < books.length; i++) {
System.out.println(books[i]);
}
//按书名长度
Arrays.sort(books, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Book b1 = (Book) o1;
Book b2 = (Book) o2;
return b2.getName().length() - b1.getName().length();
}
});
System.out.println("\n====书名长度从大到小====");
for (int i = 0; i < books.length; i++) {
System.out.println(books[i]);
}
}
}
class Book {
private String name;
private double price;
public Book(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "书名:" + name + " 价格:" + price;
}
}
|