Arrays总结

本文详细介绍了Java.util.Arrays类中的常用方法,包括asList、binarySearch、copyOf、sort、toString等,并通过示例展示了这些方法的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文将整理 java.util.Arrays工具类比较常用的方法:

本文介绍的方法基于JDK 1.7 之上。

1.  asList方法 

Java代码   收藏代码
  1. @SafeVarargs  
  2. public static <T> List<T> asList(T... a) {  
  3.     return new ArrayList<>(a);  
  4. }  
    @SafeVarargs
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }


   使用该方法可以返回一个固定大小的List,如:

Java代码   收藏代码
  1. List<String> stringList = Arrays.asList("Welcome""To""Java",  
  2.         "World!");  
  3.   
  4. List<Integer> intList = Arrays.asList(1234);  
		List<String> stringList = Arrays.asList("Welcome", "To", "Java",
				"World!");

		List<Integer> intList = Arrays.asList(1, 2, 3, 4);

  
2. binarySearch方法



binarySearch方法支持在整个数组中查找,如:

Java代码   收藏代码
  1. int index = Arrays.binarySearch(new int[] { 1234567 }, 6);  
int index = Arrays.binarySearch(new int[] { 1, 2, 3, 4, 5, 6, 7 }, 6);


以及在某个区间范围内查找, 如:

Java代码   收藏代码
  1. public static int binarySearch(int[] a, int fromIndex, int toIndex,  
  2.                                int key) {  
  3.     rangeCheck(a.length, fromIndex, toIndex);  
  4.     return binarySearch0(a, fromIndex, toIndex, key);  
  5. }  
    public static int binarySearch(int[] a, int fromIndex, int toIndex,
                                   int key) {
        rangeCheck(a.length, fromIndex, toIndex);
        return binarySearch0(a, fromIndex, toIndex, key);
    }

Java代码   收藏代码
  1. int index = Arrays.binarySearch(new int[] { 1234567 }, 166);  
int index = Arrays.binarySearch(new int[] { 1, 2, 3, 4, 5, 6, 7 }, 1, 6, 6);


3. copyOf及copyOfRange方法





如:

Java代码   收藏代码
  1. String[] names2 = { "Eric""John""Alan""Liz" };  
  2.   
  3.   
  4.         //[Eric, John, Alan]  
  5.         String[] copy = Arrays.copyOf(names2, 3);  
  6.           
  7.         //[Alan, Liz]  
  8.         String[] rangeCopy = Arrays.copyOfRange(names2, 2,  
  9.                 names2.length);  
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);


4. sort方法

Java代码   收藏代码
  1. String[] names = { "Liz""John""Eric""Alan" };  
  2. //只排序前两个  
  3. //[John, Liz, Eric, Alan]  
  4. Arrays.sort(names, 02);  
  5. //全部排序  
  6. //[Alan, Eric, John, Liz]  
  7. Arrays.sort(names);  
String[] names = { "Liz", "John", "Eric", "Alan" };
//只排序前两个
//[John, Liz, Eric, Alan]
Arrays.sort(names, 0, 2);
//全部排序
//[Alan, Eric, John, Liz]
Arrays.sort(names);


另外,Arrays的sort方法也可以结合比较器,完成更加复杂的排序。
Java代码   收藏代码
  1. public static <T> void sort(T[] a, Comparator<? super T> c) {  
  2.     if (LegacyMergeSort.userRequested)  
  3.         legacyMergeSort(a, c);  
  4.     else  
  5.         TimSort.sort(a, c);  
  6. }  
    public static <T> void sort(T[] a, Comparator<? super T> c) {
        if (LegacyMergeSort.userRequested)
            legacyMergeSort(a, c);
        else
            TimSort.sort(a, c);
    }


5. toString方法

Arrays的toString方法可以方便我们打印出数组内容。

如:

Java代码   收藏代码
  1. String[] names = { "Liz""John""Eric""Alan" };  
  2. Arrays.sort(names);  
  3. System.out.println(Arrays.toString(names));  
	String[] names = { "Liz", "John", "Eric", "Alan" };
	Arrays.sort(names);
	System.out.println(Arrays.toString(names));


控制台将打印出 [Alan, Eric, John, Liz]

6. deepToString方法

如果需要打印二维数组的内容:

int[][] stuGrades = { { 80, 81, 82 }, { 84, 85, 86 }, { 87, 88, 89 } };

如果直接用
Java代码   收藏代码
  1. System.out.println(Arrays.toString(stuGrades));  
System.out.println(Arrays.toString(stuGrades));
那么得到的结果类似于
     [[I@35ce36, [I@757aef, [I@d9f9c3]}

这个时候得用 deepToString方法才能得到正确的结果[[80, 81, 82], [84, 85, 86], [87, 88, 89]]

Java代码   收藏代码
  1. System.out.println(Arrays.deepToString(stuGrades));  
 System.out.println(Arrays.deepToString(stuGrades));


7. equals方法

使用Arrays.equals来比较1维数组是否相等。

Java代码   收藏代码
  1. String[] names1 = { "Eric""John""Alan""Liz" };  
  2.   
  3.         String[] names2 = { "Eric""John""Alan""Liz" };  
  4.   
  5.         System.out.println(Arrays.equals(names1, names2));  
String[] names1 = { "Eric", "John", "Alan", "Liz" };

		String[] names2 = { "Eric", "John", "Alan", "Liz" };

		System.out.println(Arrays.equals(names1, names2));



8. deepEquals方法

Arrays.deepEquals能够去判断更加复杂的数组是否相等。

Java代码   收藏代码
  1. int[][] stuGrades1 = { { 808182 }, { 848586 }, { 878889 } };  
  2.   
  3.         int[][] stuGrades2 = { { 808182 }, { 848586 }, { 878889 } };  
  4.   
  5.         System.out.println(Arrays.deepEquals(stuGrades1, stuGrades2));  
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));


9. fill方法
Java代码   收藏代码
  1. int[] array1 = new int[8];  
  2.         Arrays.fill(array1, 1);  
  3.         //[1, 1, 1, 1, 1, 1, 1, 1]  
  4.         System.out.println(Arrays.toString(array1));  
int[] array1 = new int[8];
		Arrays.fill(array1, 1);
		//[1, 1, 1, 1, 1, 1, 1, 1]
		System.out.println(Arrays.toString(array1));


转载请注明出处:http://mouselearnjava.iteye.com/blog/1985990
  • 大小: 60.1 KB
  • 大小: 41.9 KB
3
1
分享到:
参考知识库
Java SE知识库 28987  关注 | 578  收录
Java 知识库 35994  关注 | 3748  收录
Java EE知识库 23262  关注 | 1416  收录
JavaScript知识库 17243  关注 | 1517  收录
jQuery知识库 10564  关注 | 948  收录
AngularJS知识库 5493  关注 | 590  收录
评论
2 楼 MouseLearnJava 2013-12-06  
cywhoyi 写道
guava,非常不错的framework


这个确实不错。
1 楼 cywhoyi 2013-12-06  
guava,非常不错的framework
<think>我们正在讨论Java中的Arrays.sort方法。根据用户提供的引用,我们可以总结出Arrays.sort的基本用法、示例以及一些高级用法(如自定义比较器)。用户需求:查找关于Arrays.sort的使用方法及示例。根据引用内容:1.Arrays.sort()可以对基本类型数组和对象数组进行排序,默认是升序排序。2.对于基本类型数组,使用示例见引用[1][4]。3.对于对象数组,可以使用自定义比较器(Comparator)来实现特定排序规则,如引用[5]所示。因此,回答应包含:1.基本类型数组排序示例。2.对象数组排序示例(自然排序和自定义比较器排序)。3.注意事项(如排序范围、稳定性等)。同时,根据系统指令,需要使用LaTeX格式表示数学表达式,但本题中数学表达式较少,主要关注代码示例和文字描述。最后,生成相关问题。回答结构:一、基本用法(基本类型数组)二、对象数组排序(自然排序和自定义排序)三、部分排序(指定范围)四、注意事项五、相关问题</think>### Java `Arrays.sort()` 方法详解与示例 `Arrays.sort()` 是 Java 中用于数组排序的核心方法,支持基本数据类型和对象数组的排序。以下是分类详解: --- #### **一、基本数据类型排序** 对整型、浮点型等基本类型数组进行**升序排序**(默认): ```java import java.util.Arrays; public class BasicSort { public static void main(String[] args) { int[] arr = {5, 2, 8, 1, 9, 3}; Arrays.sort(arr); // 原地修改原数组 System.out.println(Arrays.toString(arr)); // 输出: [1, 2, 3, 5, 8, 9] [^1][^4] } } ``` --- #### **二、对象数组排序** ##### 1. **自然顺序排序**(需实现 `Comparable` 接口) ```java String[] words = {"apple", "Banana", "cherry"}; Arrays.sort(words); // 按字典序排序(区分大小写) // 输出: ["Banana", "apple", "cherry"] ``` ##### 2. **自定义排序**(通过 `Comparator`) **示例 1:字符串长度排序** ```java Arrays.sort(words, (s1, s2) -> s1.length() - s2.length()); // 输出: ["apple", "Banana", "cherry"](按长度升序) ``` **示例 2:数字字符串拼接排序** ```java String[] numStrings = {"3", "30", "34", "9"}; Arrays.sort(numStrings, (s1, s2) -> Integer.parseInt(s2 + s1) - Integer.parseInt(s1 + s2) ); // 输出: ["9", "34", "3", "30"](形成最大数:934330)[^5] ``` --- #### **三、部分范围排序** 仅排序数组中指定范围的元素: ```java int[] arr = {7, 6, 1, 10, 23, 5}; Arrays.sort(arr, 1, 4); // 对索引[1,4)区间排序(即索引1到3) System.out.println(Arrays.toString(arr)); // 输出: [7, 1, 6, 10, 23, 5] [^4] ``` --- #### **四、多维数组排序** 按子数组首元素排序: ```java int[][] matrix = {{3, 5}, {1, 2}, {2, 4}}; Arrays.sort(matrix, (a, b) -> a[0] - b[0]); // 输出: [[1,2], [2,4], [3,5]] ``` --- #### **关键注意事项** 1. **原地修改**:直接修改原数组,不返回新数组[^1][^3] 2. **稳定性**:对象数组排序是稳定的(相等元素顺序不变) 3. **性能**: - 基本类型使用**双轴快速排序**($O(n \log n)$ 平均时间) - 对象类型使用**归并排序**(稳定且 $O(n \log n)$) 4. **自定义比较器**: - 返回负数:`a < b` - 返回 0:`a = b` - 返回正数:`a > b` > 通过合理选择自然排序或自定义 `Comparator`,可灵活处理各类排序需求[^2][^3]。 --- ### 相关问题 1. 如何实现 `Arrays.sort()` 的**降序排序**? 2. 对自定义对象数组排序时,`Comparable` 和 `Comparator` 接口如何选择? 3. `Arrays.sort()` 在多线程环境下是否安全? 4. 如何处理包含 `null` 值的对象数组排序?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值