Java Collection(集合)简析
类集:在C++中叫做容器(container),而在Java中叫做类集
Collection(类集):最基本的集合接口,一个Collection代表一组Object集合。
Collection(类集)特形:
1、 元素(Elements)存放:
- 可以存放相同的Elements;
- 不可以存放相同的Elements;
2、 元素(Elements)顺序:
- 有序;
- 无序;
Collection(类集)优点:
- 程序处理对象组的方法标准化;
- 高性能;对基本类集(动态数组,链接表,树和散列表)的实现是高效率的。一般很少需要人工去对这些“数据引擎”编写代码。
- 允许不同类型的类集以相同的方式和高度互操作方式工作;
- 容易扩展和/或修改;
- 拥有将标准数组融合到类集框架中的机制;
- 算法操作简单;类集算法在Collections类中被定义为静态方法(如:max、min、reverse.......),因此它们可以被所有的类集所利用。
- 类集元素(Elements)访问简单。iterator提供了一个多用途,标准化的方法,通过由Iterator定义的方法,任一类集类的元素都能被访问到。
集合框架:就是一个用来表示和操作集合的统一的架构,包含了实现集合的接口与类。

- Collection:集合层次中的根接口,JDK没有提供这个接口直接的实现类。
- List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。

ArrayList:可以通俗的理解能够自动增长容量的数组。
LinkedList:可以通谷的理解为存放Entry对象的双向循环链表。

- Set:不能包含重复的元素。SortedSet是一个按照升序排列元素的Set。

HashSet:可以通俗的理解为随意的向集合中抛对象,集合中的对象是无序的;
LinkedHashSet:可以通俗的理解为随意的向集合中抛对象,集合中的对象是按抛进的先后顺序进行链表排序的;
TreeSet:可以通俗的理解为随意的向集合中抛对象,集合中的对象是根据指定比较器进行排序的;- Map:包含了key-value对。Map不能包含重复的key。SortedMap是一个按照升序排列key的Map。

HashMap:可以通俗的理解为存放不同标记(Key)的对象(Value)的集合;
TreeMap:可以通俗的理解为存放不同标记(Key)的对象(Value)的集合并按标记(Key)通过指定比较器进行排序。
注:
1. HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key
2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.
3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.
a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.
b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象才可以真正定位到键值对应的Entry.
c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value
4. 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.
a. Comparator可以在创建TreeMap时指定
b. 如果创建时没有确定,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口.
c. TreeMap是使用Tree数据结构实现的,所以使用compare接口就可以完成定位了.
2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.
3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.
a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.
b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象才可以真正定位到键值对应的Entry.
c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value
4. 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.
a. Comparator可以在创建TreeMap时指定
b. 如果创建时没有确定,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口.
c. TreeMap是使用Tree数据结构实现的,所以使用compare接口就可以完成定位了.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库