Java 中Arrays工具类的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 中Arrays工具类的使用相关的知识,希望对你有一定的参考价值。


介绍

java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比如排序和搜索)的各种算法。

下面我用代码给大家演示一下主要的几个方法:
具体注释已经在代码中给出

第一部分代码

@Test
public void test1()
int[] arr1 = new int[]1,2,3,4;
int[] arr2 = new int[]1,3,2,4;

//判断两个数组是否相等
boolean equals = Arrays.equals(arr1, arr2);
System.out.println(equals); //false

//输出数组信息
System.out.println(Arrays.toString(arr1));//[1, 2, 3, 4]
System.out.println(Arrays.toString(arr2));//[1, 3, 2, 4]

//将数组从小到大进行排序
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));//[1, 2, 3, 4]

//将指定值填充到数组中
//使用10,去填充arr1数组,可以理解成是替换原来的元素
Arrays.fill(arr1,10);
System.out.println(Arrays.toString(arr1));//[10, 10, 10, 10]

//该数组是从小到大进行排序
int[] arr3 = new int[]1,2,4,10,30,50;
//使用binarySearch进行二叉查找
//要求该数组是有序的,如果该数组是无序的,不能使用binarySearch
//如果数组中不存在该元素,则返回return -(low + 1); // key not found.
//low是代表要查找的值,应该存在的位置
int binarySearch = Arrays.binarySearch(arr3, 10);
if (binarySearch>0)
System.out.println(binarySearch);//3
else
System.out.println("未找到!");


//比如查找52 在数组arr3 中的位置,因为不存在则返回
//return -(low + 1)
//52,在数组中应该存在的位置为6
//所以返回的值为-(6+1) ->-7
int binarySearch = Arrays.binarySearch(arr3, 52);
System.out.println(binarySearch); //输出-7

其中Arrays.sort()方法的详解如下:

public class ArraysMethods 
public static void main(String[] args)
Integer arr[] = 1, -1, 7, 0, 89;
//1.可以直接使用冒泡排序,也可以直接使用Arrays提供的sort方法排序
//2.因为数组是引用类型,所以通过sort排序后,会直接影响到 实现arr
//3.sort()
//4.调用定制排序时,传入两个参数(1) 排序的数组 arr
//(2) 实现了Comparator接口的匿名内部类,要求实现compare方法
//5.先演示效果,再解释
//6.体现了接口编程的方式。看源码
//(1)Arrays.sort(arr, new Comparator)
//(2)最终到了类TimeSort private static <T> void binarySort(T[] a, int lo, int hi, int start,
// Comparator<? super T> c)

//(3)执行到binarySort()方法的代码,会根据动态绑定机制c.compare()执行我们传入的匿名内部类compare()
// while (left < right)
// int mid = (left + right) >>> 1;
// if (c.compare(pivot, a[mid]) < 0)
// right = mid;
// else
// left = mid + 1;
//

//(5)public int compare(Integer o1, Integer o2) 返回的值>0 还是<0 会影响整个排序结果
//这就充分体现了接口编程+动态绑定+匿名内部类的综合使用,将来的底层框架和源码的使用方式,会非常常见。
//Arrays.sort(arr); //默认排序方法 升序

//定制排序
Arrays.sort(arr, new Comparator<Integer>()
@Override
public int compare(Integer o1, Integer o2)
return o2 - o1;//降序

);

System.out.println("排序后");
System.out.println(Arrays.toString(arr));



输出结果:

排序后
[89, 7, 1, 0, -1]

第二部分代码

public class Arrays_ 
public static void main(String[] args)

Integer[] arr = 1, 2, 4, 10, 30, 50;
//copyOf 数组元素的复制
//1.从arr数组中,拷贝arr.length个元素到newArr数组中
//该方法的底层使用的是: System.arraycopy();
Integer[] newArr = Arrays.copyOf(arr, arr.length);
System.out.println("==拷贝执行完毕后==");
System.out.println(Arrays.toString(newArr));

//如果拷贝的长度 > arr.length 就在新数组的后面 增加null
Integer[] newArr1 = Arrays.copyOf(arr, arr.length + 1);
System.out.println(Arrays.toString(newArr1));

//数组少一个
Integer[] newArr2 = Arrays.copyOf(arr, arr.length - 1);
System.out.println(Arrays.toString(newArr2));

//如果拷贝的长度<0 就抛出异常NegativeArraySizeException
// Integer[] newArr3= Arrays.copyOf(arr, - 1);
// System.out.println(Arrays.toString(newArr3));

//asList 将一组值,转换成list
//1.asList方法,会将(2,3,4,5,6,1)数据转换成一个List集合
//2.返回asList编译类型 List(接口)
//3.asList运行类型:java.util.Arrays$ArrayList ,即Arrays类的
//静态内部类 private static class ArrayList<E> extends AbstractList<E>
// implements RandomAccess, java.io.Serializable
List asList = Arrays.asList(2, 3, 4, 5, 6, 1);
System.out.println("asList=" + asList);
System.out.println("asList的运行类型为:"+asList.getClass());

输出结果如下:

==拷贝执行完毕后==
[1, 2, 4, 10, 30, 50]
[1, 2, 4, 10, 30, 50, null]
[1, 2, 4, 10, 30]
asList=[2, 3, 4, 5, 6, 1]
asList的运行类型为:class java.util.Arrays$ArrayList

Arrays的练习

Java


代码如下

public class ArrayExercise 
public static void main(String[] args)
Book[] books = new Book[4];
books[0] = new Book("红楼梦", 100);
books[1] = new Book("金瓶梅新", 90);
books[2] = new Book("青年文摘20年", 5);
books[3] = new Book("java从入门到放弃", 300);

//按照price 从小到大排序
// Arrays.sort(books, new Comparator()
// @Override
// public int compare(Object o1, Object o2)
// Book book1 = (Book) o1;
// Book book2 = (Book) o2;
// double priceVal = book1.getPrice() - book2.getPrice();
// if (priceVal > 0)
// return 1;
// else if (priceVal < 0)
// return -1;
// else
// return 0;
//
//
// );

//按照price 从小到大排序
// Arrays.sort(books, new Comparator()
// @Override
// public int compare(Object o1, Object o2)
// Book book1 = (Book) o1;
// Book book2 = (Book) o2;
// double priceVal = book2.getPrice() - book1.getPrice();
// if (priceVal > 0)
// return 1;
// else if (priceVal < 0)
// return -1;
// else
// return 0;
//
//
// );

Arrays.sort(books, new Comparator()
@Override
public int compare(Object o1, Object o2)
Book book1 = (Book) o1;
Book book2 = (Book) o2;
return book2.getName().length() - book1.getName().length();

);
System.out.println(Arrays.toString(books));



class Book
private String name;
private double 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 "Book" +
"name=" + name + \\ +
", price=" + price +
;


public Book(String name, double price)
this.name = name;
this.price = price;

输出结果如下

[Bookname=java从入门到放弃, price=300.0, Bookname=青年文摘20年, price=5.0, Bookname=金瓶梅新, price=90.0, Bookname=红楼梦, price=100.0]


以上是关于Java 中Arrays工具类的使用的主要内容,如果未能解决你的问题,请参考以下文章

Java中对数组升序排列用Arrays.sort( )方法,那降序排列用啥方法?

集合-Java中Arrays.sort()自定义数组的升序和降序排序

明哥工具箱数组升序和降序

Java实现数组降序的方法

数组的升序与降序

Java Arrays类进行数组排序