treemap treeset hashset hashmap 简要介绍

在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中`TreeMap`、`TreeSet`、`HashSet`以及`HashMap`是最常用的数据结构之一。这些集合类各自有着独特的特性和应用场景,下面将对它们进行详细介绍。 ### TreeMap `TreeMap`是基于红黑树(Red-Black tree)实现的Sorted Map(排序映射)。它实现了`Map`接口,并且提供了一些额外的方法,如`firstKey()`和`lastKey()`,用于获取键集中的最小和最大元素。`TreeMap`的键必须是可比较的(即实现了`Comparable`接口),或者在创建时提供一个`Comparator`对象来指定键的排序规则。由于`TreeMap`内部维护了一个红黑树,因此它的键值对是按照键的自然顺序或自定义排序顺序排列的,这使得`TreeMap`非常适合需要保持键有序的场景。 ### TreeSet `TreeSet`是基于`TreeMap`实现的一个Set(集合)实现。它同样要求元素是可比较的,或者在创建时提供一个`Comparator`。`TreeSet`可以保证集合中的元素处于排序状态,不会包含重复的元素,因为它是通过`TreeMap`的键唯一性来实现的。与`TreeMap`类似,`TreeSet`也支持`headSet()`、`tailSet()`和`subSet()`等方法,用于返回集合的一部分。 ### HashSet `HashSet`是基于哈希表实现的Set(集合)实现,它不保证集合中元素的任何特定顺序。`HashSet`允许快速添加、删除和查找元素,但不能包含重复的元素。为了正确地工作,`HashSet`要求元素具有良好的`equals()`和`hashCode()`方法实现,以确保元素的唯一性和性能。`HashSet`的底层使用了`HashMap`,实际上,`HashSet`内部就是一个`HashMap`,其中所有值都被设置为`null`。 ### HashMap `HashMap`是基于哈希表实现的`Map`接口,它提供了快速的插入、删除和查找操作。`HashMap`可以包含空键和多个空值,但只允许一个空键。`HashMap`的关键特性是其非线程安全性和元素的无序性。为了确保`HashMap`的性能,元素的`hashCode()`和`equals()`方法应该被正确实现,以避免哈希冲突和确保正确的元素相等性判断。 在代码示例中,可以看到`SmileCollections`类分别测试了`TreeSet`和`HashMap`的用法。对于`TreeSet`,虽然尝试添加了多个相同的`Student`对象,但由于`TreeSet`不允许重复元素,最终集合中只会保留一个元素。对于`HashMap`,尽管`Student`类的`equals()`和`hashCode()`方法未正确实现,但是由于`HashMap`使用的是对象引用作为键,所以每个调用`put()`方法都会覆盖之前的值,最终`map`中只会有最后一个键值对。 选择`TreeMap`、`TreeSet`、`HashSet`还是`HashMap`,主要取决于具体的应用需求,比如是否需要保持元素的排序,是否允许重复元素,以及对插入、删除和查找操作速度的要求。正确理解并使用这些集合类,可以极大地提高程序的效率和可读性。




























package com.smile;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
public class SmileCollections {
public static void main(String[] args) {
// treeTest();
mapTest();
}
public static void treeTest() {
Set set = new TreeSet();
set.add(new Student("a", 1));
set.add(new Student("a", 1));
set.add(new Student("a", 1));
set.add(new Student("a", 1));
System.out.println(set.size());
// 首先放入TreeSet中的东西要实现comparable接口,至于能不能重复要看放入的这个东西是真怎么样重写compareTo方法的。
// 如果待添加对象的compareto方法返回的值和set中已有的某个对想的compareto方法返回的值相同则认为相同而不添加,反之添加
// treemap中的key和以上类似。
}
public static void mapTest() {
Map map = new HashMap();
map.put(new Student("a", 1), 1);

- meimao52112013-06-18知识点以学习,很有帮助 谢谢楼主

- 粉丝: 5
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 学校健康教育组织机构网络图.doc
- 联想病毒式网络营销案例分析.pptx
- 网络媒体的优势.ppt
- excel一列求和.docx
- 无线通信技术.docx
- 说课题目PHOTOSHOP中图层混合模式的应用课件.pptx
- 计算机的软件系统教案设计详案.pdf
- 基于PLC的蜂窝煤生产线五传送带控制系统设计:梯形图程序、接线图及组态画面详解
- 电子商务教师年度工作总结.doc
- 医院网络营销中市场意识与竞价关键词的选择技巧.pptx
- 孩子接触编程后的变化.doc
- 网络安全教育总结.docx
- 2023年C语言二级考试试题及答案.doc
- 课标内容以网络技术为例理解现代信息技术对人类社会的.pptx
- 项目管理人员职能工表样本.doc
- 余英三期创市标化组织网络和计划措施汇报.doc


