JDK源码( java.util.Arrays)
程序员文章站
2024-03-06 22:35:08
...
java.util.Arrays
方法: asList
api介绍:
返回由指定数组支持的固定大小的列表。 (将返回的列表更改为“写入数组”。)
该方法作为基于数组和基于集合的API之间的桥梁,与Collection.toArray()相结合 。
返回的列表是可序列化的,并实现RandomAccess 。
// String[]转list
String[] strings = {"Larry", "Moe", "Curly"};
List<String> list1 = Arrays.asList(strings);
for (String s : list1) {
System.out.println("String[]转list "+s);
}
//直接声明一个集合
List<String> list = Arrays.asList("Larry", "Moe", "Curly");
for (String s : list) {
System.out.println("直接声明一个集合 "+s);
}
方法: hashCode
api介绍:
根据指定数组的内容返回哈希码。 对于任何两个long阵列a和b这样Arrays.equals(a, b) ,
也是Arrays.hashCode(a) == Arrays.hashCode(b)的情况。
通过此方法返回的值是将通过调用能够得到相同的值hashCode上的方法List含有序列Long个实例表示
的a以相同顺序的元素。 如果a是null ,则此方法返回0。
String[] list_a = {"Larry", "Moe", "Curly"};
String[] list_b = {"Larry", "Moe", "Curly"};
System.out.println(list_a.hashCode());
System.out.println(list_b.hashCode());
System.out.println(Arrays.equals(list_a,list_b));
方法 toString
api介绍:
返回指定数组的内容的字符串表示形式。 字符串表示由数组元素的列表组成,
括在方括号( "[]" )中。 相邻的元素由字符", " (逗号后跟一个空格)分隔开。
元素被转换为字符串由String.valueOf(long)。 返回"null"如果a是null。
long[] list1 = new long[]{1,2,3};
String list1Str = Arrays.toString(list1);
System.out.println(list1Str);
方法 binarySearch
api介绍:
使用二进制搜索算法搜索指定值的指定字节数组的范围。 在进行此呼叫之前,
范围必须按照sort(byte[], int, int)方法进行排序。 如果没有排序,结果是未定义的。
如果范围包含具有指定值的多个元素,则不能保证将找到哪个元素。
int arr[] = new int[]{1, 3, 4, 5, 8, 9};
Arrays.sort(arr);
int index1 = Arrays.binarySearch(arr, 6);
int index2 = Arrays.binarySearch(arr, 4);
int index3 = Arrays.binarySearch(arr, 0);
int index4 = Arrays.binarySearch(arr, 10);
System.out.println("index1 = " + index1 + ", index2 = " + index2 + ",
index3 = " + index3 + ", index4 = " + index4);
int arr[] = new int[]{1, 3, 4, 5, 8, 9};
System.out.println(arr.length + 1);
Arrays.sort(arr);
int index5 = Arrays.binarySearch(arr, 1, 4, 6);
int index6 = Arrays.binarySearch(arr, 1, 4, 4);
int index7 = Arrays.binarySearch(arr, 1, 4, 2);
int index8 = Arrays.binarySearch(arr, 1, 3, 10);
int index9 = Arrays.binarySearch(arr, 1, 3, 0);
System.out.println("index5 = " + index5 + ", index6 = " + index6 + ", index7 = " + index7+"," +
" index8 = "+index8+ " index9 = "+index9
);
方法 copyOf copyOfRange
api介绍:
copyOf:
复制指定的数组,截断或填充false (如有必要),以使副本具有指定的长度。 对于原始数组和副本都有效的所有索引,
两个数组将包含相同的值。 对于在副本中而不是原件有效的任何索引,副本将包含false 。 当且仅当指定长度大于原始
数组的长度时,这些索引才会存在。
copyOfRange:
将指定数组的指定范围复制到新数组中。 范围( from )的初始指数必须在零和original.length之间,包括在内。
original[from]的值被放置在副本的初始元素中(除非from == original.length或from == to )。
原始数组中后续元素的值将被放置在副本中的后续元素中。 必须大于或等于from的范围( to )的最终指数可能
大于original.length ,在这种情况下, null被放置在其索引大于或等于original.length - from的副本的
所有元素中。 返回的数组的长度将为to - from 。
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, 5);
int[] arr3 = Arrays.copyOf(arr1, 10);
int[] arr4 =Arrays.copyOfRange(arr1,1,2);
for(int i = 0; i < arr2.length; i++){
System.out.print(arr2[i] + " ");
}
System.out.println();
for(int i = 0; i < arr3.length; i++){
System.out.print(arr3[i] + " ");
}
System.out.println();
for (int i = 0; i < arr4.length; i++) {
System.out.println(arr4[i]);
}
方法 sort
api介绍:
照数字顺序排列指定的数组。
<关系不提供所有浮动值的总订单: -0.0f == 0.0f是true ,而Float.NaN值比较不小于,大于或等于任何值,甚至本身。
该方法使用方法Float.compareTo(java.lang.Float) : -0.0f处理为小于值0.0f和Float.NaN的总顺序被认为大于任
何其他值,并且所有Float.NaN值被视为相等。
实施注意事项:排序算法是由Vladimir Yaroslavskiy,Jon Bentley和Joshua Bloch提供的双轴快速排序。 该算法在许
多数据集上提供O(n log(n))性能,导致其他快速排序降级为二次性能,并且通常比传统(单轴)Quicksort实现更快。
int[] ints=new int[]{2,324,4,57,1};
System.out.println("增序排序后顺序");
Arrays.sort(ints);
for (int i=0;i<ints.length;i++) {
System.out.print(ints[i]+" ");
}
方法 fill
api介绍:
将指定的char值分配给指定的char数组的指定范围的每个元素。 要填补的范围从索引fromIndex (包括)扩展到索引
toIndex ,排他。 (如果fromIndex==toIndex ,要填充的范围是空的。)
int[] a = new int[]{1,2,3,4,5,6};
System.out.println(Arrays.toString(a)); //{1,2,3,4,5,6}
Arrays.fill(a, 0);
System.out.println(Arrays.toString(a)); //{0,0,0,0,0,0}
上一篇: c语言实现数据结构中的栈
下一篇: c++数据结构中的:循序表Vector