Java 集合类(一)
今天我们先讲一下Collection:
- Collection和Collections的区别:
- java.util.Collection是一种java集合接口,它提供了对集合对象的基本操作通用接口方法,同时它还有很多具体实现:
注:以上图片只列举常用集合类
- java.util.Collections是一个包装类,它包含许多有关集合操作的静态多态方法,此类不能实例化,它就像个工具类,服务与java的Collection。有关Collections的具体方法可参考JDK说明文档(部分也可见),下面我举出几个方法示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import java.util.Collection; import java.util.Collections; import java.util.ArrayList; import java.util.List; public class test { private double [] a = { 123 , 33 , 423 , 655 , 4553 }; List<Double> l = new ArrayList(); List<Double> l2 = new ArrayList(); public static void main(String[] args) { new test().sort(); } public void sort(){ for ( int i = 0 ; i<a.length;i++ ){ l.add(a[i]); } Collections.sort(l); for ( int i = 0 ;i<a.length;i++){ System.out.println(l.get(i)); } } } |
运行结果如下:
可在上面代码的基础上添加同类方法,如:
把上面sort()中的Collections.sort(l);--->Collections.shuffle(l); //随机排序
--->Collections.reverse(l); //反转排序
--->Collections.min(l); //返回最小元素(max,最大)
--->Collections.fill(l,"334"); //用334替换所有元素
......
2.常见java容器的比较:
接口 |
特性 |
实现类 |
实现类特性 |
成员要求 |
List |
线性、有序的存储容器,可通过索引访问元素 |
ArrayList |
数组实现。非同步。 |
|
Vector |
类似ArrayList,同步。 |
|
||
LinkedList |
双向链表。非同步。 |
|
||
Map |
保存键值对成员 |
HashMap |
基于哈希表的 Map 接口的实现,满足通用需求 |
任意Object对象,如果修改了equals方法,需同时修改hashCode方法 |
TreeMap |
默认根据自然顺序进行排序, 或者根据创建映射时提供的 Comparator进行排序 |
键成员要求实现Comparable接口,或者使用Comparator构造TreeMap。键成员一般为同一类型。 |
||
LinkedHashMap |
类似于HashMap,但迭代遍历时取得“键值对”的顺序是其插入顺序或者最近最少使用的次序 |
与HashMap相同 |
||
IdentityHashMap |
使用==取代equals()对“键值”进行比较的散列映射 |
成员通过==判断是否相等 |
||
WeakHashMap |
弱键映射,允许释放映射所指向的对象 |
|
||
ConcurrentHashMap |
线性安全的Map |
|
||
Set |
成员不能重复 |
HashSet |
为快速查找设计的Set |
元素必须定义hashCode() |
TreeSet |
保持次序的Set,底层为树结构 |
元素必须实现Comparable接口 |
||
LinkedHashSet |
内部使用链表维护元素的顺序(插入的次序) |
元素必须定义hashCode() |
注:在满足要求的情况下,Map应尽量使用HashMap,Set应尽量使用HashSet
3.Collection的学习:
实例1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import java.util.*; public class SimpleCollection{ public static void main(String[] args){ Collection<Integer> c = new ArrayList<Integer>(); for ( int i = 0 ;i < 10 ; i++) c.add(i); //Autoboxing for (Integer i: c) System.out.println(i + ", " ); } } /* 0,1,2,3,4,5,6,7,8,9, */ |
实例2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /* 如何向Collection添加一组元素 */ //以下是方法体 Collection<Integer> collection = new ArrayList<Integer> (Arrays.asList( 1 , 2 , 3 , 4 , 5 )); //Array像Collections一样是工具类 Integer[] moreInt = { 6 , 7 , 8 , 9 , 10 }; Collection.addAll(Arrays.asList(moreInt)); Collections.addAll( collection, 11 , 12 , 13 , 14 ); //Collection对象作参数 Collections.addAll( collection, moreInt); List<Integer> list = Arrays.asList( 16 , 17 , 18 ); list.set( 1 , 99 ); //list.add(21) //错误,asList产生的List的长度不可变,只能修改元素值 |
下一节学习List部分!!
### 学习从来都是一个过程,对对错错对对...若文中有错误,还望读者批评指出 ###
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述