数据算法--Arrays的使用

Posted LinkinPark8林肯

tags:

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


Java提供的Arrays类里包含了一些static修饰的方法可以直接操作数组,这个Arrays类里包含了如下几个static修饰的方法:

1),static type binarySearch(type[] a, type key)

Searches the specified array of bytes for the specified value using the binary search algorithm.

使用二分法查询key元素值在a数组中出现的索引,如果a数组不包含key元素值,则返回负数(-数组的长度-1)

调用该方法时要求数组中元素已经按升序排列,这样才能得到正确结果

2),static type binarySearch(type[] a, int fromIndex, int toIndex, type key)

Searches a range of the specified array of bytes for the specified value using the binary search algorithm.

该方法与前一个方法类型,但它只搜索a数组中的fromIndex到toIndex索引的元素。

调用该方法时要求数组中元素已经按升序排列,这样才能得到正确结果。

import java.util.Arrays;

/**
 * Arrays工具类的使用
 * 
 * @author LinkinPark
 */
public class ArraysTest


	public static void main(String[] args)
	
		int[] arr =  1, 2, 4, 3, 5 ;
		// 使用binarySearch,要先对数组做升序排序
		Arrays.sort(arr);
		// 数组升序排序,下行代码输出[1, 2, 3, 4, 5]
		System.out.println(Arrays.toString(arr));
		// 4出现的索引为3,下行代码输出3
		System.out.println(Arrays.binarySearch(arr, 4));
		// 数组不包含6,输出-arr.length-1,下行代码输出-6
		System.out.println(Arrays.binarySearch(arr, 6));
		// 数组索引从0到2,查找1的索引,下面代码输出0
		System.out.println(Arrays.binarySearch(arr, 0, 2, 1));
		// 索引从0到2的数组不包含6,输出-arr.length-1,下行代码输出-3
		System.out.println(Arrays.binarySearch(arr, 0, 2, 6));
	


3),static <T> T[] copyOf(T[] original, int newLength)

Copies the specified array, truncating or padding with nulls (if necessary) so the copy has the specified length.

这个方法将会把original数组复制成一个新数组,其中length是新数组的长度。

如果length小于original数组的长度,则新数组就是原来数组的前面length个元素

如果length大于original数组的长度,则新数组的前面元素就是原数组的所有元素,后面补充0,false,或者null

4),static <T> T[] copyOfRange(T[] original, int from, int to)

Copies the specified range of the specified array into a new array.

这个方法与前面方法相似,但这个方法值复制original数组的from索引到to索引的元素。

import java.util.Arrays;

/**
 * Arrays工具类的使用
 * 
 * @author LinkinPark
 */
public class ArraysTest


	public static void main(String[] args)
	
		int[] arr =  1, 2, 3, 4, 5 ;
		// 新的数组长度大于arr数组,后面用0补齐。[1, 2, 3, 4, 5, 0]
		int[] copyArr1 = Arrays.copyOf(arr, 6);
		System.out.println(Arrays.toString(copyArr1));
		// 新的数组长度小于arr数组,截取新数组的长度。[1, 2, 3]
		int[] copyArr2 = Arrays.copyOf(arr, 3);
		System.out.println(Arrays.toString(copyArr2));
		// 截取arr数组下标从1到3形成一个新的数组。[2, 3]
		int[] copyArr3 = Arrays.copyOfRange(arr, 1, 3);
		System.out.println(Arrays.toString(copyArr3));
	


5),static void fill(type[] a, type val)

Assigns the specified int value to each element of the specified array of ints.

该方法将会把a数组的所有元素都赋值为val。

6),static void fill(type[] a, int fromIndex, int toIndex, type val)

Assigns the specified int value to each element of the specified range of the specified array of ints.

该方法与前一个方法的作用相同,区别只是该方法仅仅将a数组的fromIndex到toIndex索引的数组元素赋值为val。

import java.util.Arrays;

/**
 * Arrays工具类的使用
 * 
 * @author LinkinPark
 */
public class ArraysTest


	public static void main(String[] args)
	
		int[] arr =  1, 2, 3, 4, 5 ;
		// 将数组arr全部赋值为6。[6, 6, 6, 6, 6]
		Arrays.fill(arr, 6);
		System.out.println(Arrays.toString(arr));
		int[] arr1 =  1, 2, 3, 4, 5 ;
		// 将数组arr1,索引从1到4,赋值为6 [1, 6, 6, 6, 5]
		Arrays.fill(arr1, 1, 4, 6);
		System.out.println(Arrays.toString(arr1));
	


7),static boolean equals(type[] a, type[] a2)

Returns true if the two specified arrays of ints are equal to one another.

如果a数组和a2数组的长度相等,而且a数组和a2数组的数组元素也一一相同,该方法将返回true。

8),static String toString(type[] a)

Returns a string representation of the contents of the specified array.

该方法将一个数组转换成一个字符串,该方法按顺序把多个数组元素连缀在一起,多个数组元素使用英文逗号和空格隔开

9),static void sort(type[] a)

Sorts the specified array into ascending numerical order.

该方法对a数组的数组元素进行排序。

10),static <T> List<T> asList(T... a)

Returns a fixed-size list backed by the specified array.

返回一个受指定数组支持的固定大小的列表,(对返回列表的更改会“直接写”到数组。)此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection 的 API 之

间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。

此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");

import java.util.Arrays;
import java.util.List;

/**
 * Arrays工具类的使用
 * 
 * @author LinkinPark
 */
public class ArraysTest


	public static void main(String[] args)
	
		// 判断arr1和arr2是否相等,下面代码输出true
		int[] arr1 =  1, 2, 3, 4, 5 ;
		int[] arr2 =  1, 2, 3, 4, 5 ;
		System.out.println(Arrays.equals(arr1, arr2));
		// 将一个可变参数的数组转换成一个数组,[1, 2, 3, 4, 5]
		List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
		System.out.println(list.toString());
	



11),static XxxStream stream(xxx[] array)

Returns a sequential IntStream with the specified array as its source.

该方法将数组转换为Stream,Stream是Java8新增的流式编程的API。

12),static XxxStream stream(xxx[] array, int startInclusive, int endExclusive)

Returns a sequential IntStream with the specified range of the specified array as its source.

该方法与上一个方法相似,区别是该方法仅将startInclusive到endExclusive索引的元素转换成Stream。

13),还有一些以parallel(并行)开头的方法都表示该方法可利用CPU并行的能力来提高性能,比如parallelSort等等。


以上是关于数据算法--Arrays的使用的主要内容,如果未能解决你的问题,请参考以下文章

JAVA使用Arrays.sort()升序和降序

JAVA使用Arrays.sort()升序和降序

JDK排序 DualPivotQuicksort

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

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

类Arrays