常用类库之Arrays类:数组扩容,二分查找,排序。。。

本文详细介绍了Java中的Arrays类,包括如何使用toString方法输出数组,运用sort方法对数组进行排序,利用binarySearch实现二分查找,以及使用copyOf进行数组扩容。示例代码清晰易懂,帮助读者更好地理解和应用这些常用方法。

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

该类包含用于操作数组的各种方法(例如排序和搜索)。 

主要还是用示例给大家演示几个常用方法~~~

一、tostring---一种输出数组的方法

平时输出数组:循环遍历输出数组

 int arr[] = {1, 2, 3, 6, 0, 8, 2};
        for (int i = 0; i<arr.length; i++){
            System.out.print(arr[i]+"\t");
        }

用Arrays.tostring输出数组:

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

 

二、Arrays.sort对数组进行排序

排序方法返回值为空,所以要排序完再输出!

Arrays.sort(arr);    //对数组进行排序
System.out.println(Arrays.toString(arr));  //输出

三、Arrays.binarySearch  二分查找

System.out.println(Arrays.binarySearch(arr,3)); //二分查找,传入数组,传入数字

二分查找返回int:传入数组arr,传入查找数字3。返回下标为4.

四、Arrays.copyOf 数组扩容

平时我们手动的扩容都是新写一个数组,把原数组中的数据遍历进去,再覆盖原数组。比较麻烦。

在Arrays类中,数组扩容方法:Arrays.copyOf

 int arr[] = {1, 2, 3, 6, 0, 8, 2};
 System.out.println(arr.length);  //输出原数组长度
 arr = Arrays.copyOf(arr,20);  //传入数组与扩容后的长度,返回一个数组
 System.out.println(arr.length);  //输出扩容后数组长度

 

<think>好的,我现在需要处理用户关于Java集合框架的详细解释请求。用户已经提供了一些站内引用,我需要结合这些引用来构建一个结构化的回答。首先,我要理解用户的需求:他们想了解Java集合框架的概念和用法,可能需要一个全面的概述,包括主要接口、实现、使用场景以及注意事项。根据引用[1]、[2]、[4]和[5],Java集合框架的核心是提供存储和操作数据的接口和,分为Collection和Map两大根接口。Collection下分为List、Set、Queue,而Map则是键值对的集合。需要详细说明每个接口的特点,比如List有序可重复,Set无序不可重复,Map的键唯一等。还要提到常用实现如ArrayList、LinkedList、HashSet、HashMap等,并比较它们的底层数据结构和性能差异。引用[3]提到了通过学生管理系统示例展示集合的使用,这可能需要在回答中加入实际代码示例,比如用ArrayList管理学生对象。此外,引用[4]和[5]提到集合的选择要考虑存储顺序、重复元素、查找效率等因素,这部分需要强调在实际应用中的选择策略。用户之前的提问涉及final、finally、finalize的区别,现在转向集合框架,可能需要保持回答的深度和结构的一致性。系统指令要求使用中文,正确使用LaTeX公式,生成相关问题,并在引用处标注。需要注意数学表达式用$...$,独立公式用$$...$$,不过集合框架可能较少涉及数学公式,但如果有比较性能的公式可能需要应用。接下来需要组织内容结构,可能分为概述、核心接口、常用实现、使用场景、注意事项等部分。每个部分参考对应的引用,比如引用[4]详细说明了Collection和Map的结构,引用[5]比较了ArrayList和LinkedList的底层原理差异。在代码示例部分,可以使用学生管理系统的例子,如引用[3]所示。还需要考虑用户可能的后续问题,比如集合的线程安全、性能优化、遍历方式等,生成相关问题放在最后。同时确保引用标注正确,如引用[1]和[2]都提到集合框架的作用,引用[5]讨论了不同集合的底层原理。最后检查是否符合所有系统指令:中文回答,正确引用,代码块格式,相关问题生成,结构清晰。确保没有使用Markdown,但保持段落和代码的清晰分隔。可能需要注意术语的一致性,例如“集合框架”与“集合库”是否统一,避免混淆。</think>### Java 集合框架详解 #### 一、核心概念 Java 集合框架(Java Collections Framework)是用于存储和操作数据集合的标准工具库,提供了一套高性能、易扩展的接口和[^1][^2]。其核心分为两大根接口: - **Collection**:存储单个元素,包含子接口: - `List`:有序且允许重复(如:$[1,2,3]$) - `Set`:无序且不允许重复(如:$\{a,b,c\}$) - `Queue`:队列结构(如:先进先出) - **Map**:存储键值对(Key-Value),键唯一(如:$\{K_1:V_1, K_2:V_2\}$)[^4] --- #### 二、常用实现对比 | 接口 | 实现 | 数据结构 | 时间复杂度(平均) | 适用场景 | |-------------|------------------|----------------|------------------------|------------------------------| | **List** | `ArrayList` | 动态数组 | 查询$O(1)$,增删$O(n)$ | 频繁随机访问 | | | `LinkedList` | 双向链表 | 查询$O(n)$,增删$O(1)$ | 频繁插入/删除 | | **Set** | `HashSet` | 哈希表 | 增删查$O(1)$ | 快速去重 | | | `TreeSet` | 红黑树 | 增删查$O(\log n)$ | 需要有序遍历 | | **Map** | `HashMap` | 数组+链表/红黑树 | 增删查$O(1)$ | 高频键值操作 | | | `LinkedHashMap` | 链表+哈希表 | 增删查$O(1)$ | 需保持插入顺序 | --- #### 三、关键操作示例 1. **List 遍历** ```java List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); // 增强for循环 for (String s : list) { System.out.println(s); } ``` 2. **Map 键值处理** ```java Map<Integer, String> map = new HashMap<>(); map.put(1, "Apple"); map.put(2, "Banana"); // 遍历键值对 map.forEach((k, v) -> System.out.println(k + ":" + v)); ``` 3. **学生管理系统(引用[3])** ```java class StudentManager { private List<Student> students = new ArrayList<>(); public void addStudent(Student s) { students.add(s); } public void removeStudent(int id) { students.removeIf(s -> s.getId() == id); } } ``` --- #### 四、选择策略与注意事项 1. **性能考量** - 随机访问选`ArrayList`,插入删除选`LinkedList`[^5] - 哈希冲突时,`HashMap`可能退化为$O(n)$,需合理设置初始容量 2. **线程安全** - 默认集合非线程安全,可用`Collections.synchronizedList()`包装 - 并发场景推荐`ConcurrentHashMap`或`CopyOnWriteArrayList` 3. **内存优化** ```java // 预分配容量减少扩容开销 ArrayList<String> list = new ArrayList<>(1000); ``` --- #### 五、特殊集合工具 | 工具 | 功能 | 示例 | |-----------------|-----------------------------------|-------------------------------| | `Collections` | 提供排序、查找等算法 | `Collections.sort(list)` | | `Arrays` | 数组与集合转换 | `Arrays.asList("a","b")` | | `Stream API` | 函数式集合操作(Java 8+) | `list.stream().filter(...)` | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值