`
womendu
  • 浏览: 1480966 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java集合类4—HashSet、TreeSet、HashMap、TreeMap介绍

 
阅读更多

在前面我们已经介绍了题目中几个类分别实现了哪个接口。HashSet和TreeSet都直接或者间接的继承了Set接口,所以它存储的元素中不允许出现重复元素。

我们先来介绍一下HashSet。HashSet称为哈希表又称散列表。散列表算法的基本思想是:以结点的关键字为自变量,通过一定的函数关系(散列函数)计算出对应的函数值,以这个值作为该结点存储在散列表中的地址。当散列表中的元素存放太满,就必须进行再散列,将产生一个新的散列表,所有元素存放到新的散列表中,原先的散列表将被删除。在Java语言中,通过负载因子(load factor)来决定何时对散列表进行再散列。例如:如果负载因子是0.75,当散列表中已经有75%的位置已经放满,那么将进行再散列。负载因子越高(越接近1.0),内存的使用效率越高,元素的寻找时间越长。负载因子越低(越接近0.0),元素的寻找时间越短,内存浪费越多。HashSet类的缺省负载因子是0.75。

对于HashSet我们还应该知道HashSet实质是通过HashMap来实现的。还应该记住我们应该为定义到HashSet中的对象定义hashCode和equals方法。在HashSet中并没有get方法,我们只能通过迭代器去访问其中的元素。下面我们给出一个例子:

//学号3姓名lisi

学号1姓名zhangsan

学号2姓名wangwu

上面的程序输出的结果跟我们预料的一样,但是这个并不是正确的。我们在第7行的地方在加上一句代码:hs.add(new Stuent(1,”zhangsan”);输出的结果如下:

//学号1姓名zhangsan

学号3姓名lisi

学号2姓名wangwu

学号1姓名zhangsan

HashSet里面不可以存储相同的元素,但是我们还是输入进去了,这个并不是我们想要的。这个是因为HashSet在判断是否是相同元素的时候是根据散列值判断的,虽然他们看上去一样但是其散列值是不同的。为了实现我们想要的结果我们必须重写hashCode和equals方法。下面我们修改一下上面的程序:

//学号1姓名zhangsan

学号2姓名wangwu

学号3姓名lisi

上面我输出了我们想要的结果,下面我们说一下TreeSet。TreeSet和HashSet不同的地方就是前者存入的时候会按照一定的顺序存入。TreeSet是一个有序集合,TreeSet中元素将按照升序排列,缺省是按照自然顺序进行排列,意味着TreeSet中元素要实现Comparable接口。我们可以在构造TreeSet对象时,传递实现了Comparator接口的比较器对象。我们可以为我们需要存入的对象实现CompareTo方法。我们也可以实现一个比较器,在我们创建TreeSet的时候作为参数传入。其他的跟HashSet都基本相同,读者可以自己去试验。

HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。我们通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet。

对于HashMap、TreeMap和HashSet、TreeSet基本的方法都差不多。它们两个存储的时候需要一个键值和一个对象作为参数。对于这两个类大家可以参照Java的帮助文档学习一下。我们这里就不过多的讲解了。

希望本次文章对你有帮助,如有错误请指出。

分享到:
评论

相关推荐

    对java基础集合部分(List、HashMap、HashSet、ArrayList等)底层源码的分析与总结

    这篇集合总结一共包括十二节,介绍了一些接口和实现类的底层源码以及基本的增加、删除元素等的操作(包括List、Map、Set接口、ArrayList、Vector、LinkedList、HashSet、TreeSet、HashMap、TreeMap等实现类)。...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java集合详解4:HashMap和HashTable Java集合详解5:深入理解LinkedHashMap和LRU缓存 Java集合详解6:TreeMap和红黑树 Java集合详解7:HashSet,TreeSet与LinkedHashSet Java集合详解8:Java集合类细节精讲 JavaWeb

    java集合类原理面试题

    java集合类 Java中有哪些容器(集合类)? 线程安全和线程不安全的分别有哪些? Map接口有哪些实现类? 描述一下Map put的过程 如何得到一个线程安全的Map? HashMap有什么特点? ConcurrentHashMap是怎么分段分组...

    实验05 Java集合.doc

    4)了解Map接口及主要实现类(HashMap、TreeMap、HashTable) 二、实验内容及步骤 1、编写程序练习将以下5个Person类的对象放在一个HashSet中。 姓名:张三 身份证号:178880001 姓名:王五 身份证号:178880002 ...

    Java集合框架完整说明便于了解集合

    java集合在日常开发中经常用到,对基础的掌握尤其重要,其中List,Set,Map的作用以及使用的场景和分类描述,其中Arraylist 与 LinkedList 区别,HashSet与TreeSet与LinkedHashSet对⽐,LinkedHashMap和HashMap,...

    Java 集合方面的面试题

    HashSet 和 TreeSet 有什么区别? HashMap 和 TreeMap 有什么区别? 什么是迭代器?如何使用它来遍历集合? 什么是 fail-fast 机制? 如何使用 Collections 类对集合进行排序? 什么是 Comparable 和 Comparator ...

    Java 基础核心总结 +经典算法大全.rar

    ArrayList Vector LinkedList 类Stack HashSet TreeSet LinkedHashSet 类 PriorityQueue HashMap TreeMap 类 LinkedHashMap 类 Hashtable 类IdentityHashMap 类WeakHashMap 类 Collections 类集合实现类特征图 泛形 ...

    实验七:Java集合与泛型

    本次实验掌握了集合的概念、体系结构、分类及使用场景,了解了Set接口及主要实现类(HashSet、TreeSet),了解了解List接口及主要实现类(ArrayList、LinkedList、Vector),掌握ArrayList的使用及其与Vector的区别,...

    java9源码下载-Java:java练习

    java9 源码下载 Java se 基础练习 每个目录为一个大的模块(如 集合,数据结构,反射,设计模式等),目录的详信息将在二级目录下详细列出 ...Collections集合类的使用(synchronized 包装等) queue stack commonlyCla

    超全Java集合框架讲解.md

    超全Java集合框架讲解 - 超全Java集合框架讲解 - 集合框架总览 - Iterator Iterable ListIterator - Map 和 Collection 接口 - Map 集合体系详解 - HashMap - LinkedHashMap - TreeMap - WeakHashMap - ...

    基础深化和提高-java容器

    Java标准库中提供了多种实现Collection接口的类,如ArrayList、LinkedList(List的实现)、HashSet、TreeSet(Set的实现)、PriorityQueue等。 Map: Map用于存储键值对(Key-Value Pair)的数据,它的实现类有...

    java基础案例与开发详解案例源码全

    11.2.1 实现类HashSet267 11.2.2 实现类LinkHashSet270 11.2.3 实现类TreeSet272 11.3 List接口实现类277 11.3.1 实现类ArrayList277 11.3.2 实现类LinkedList279 11.3.3 实现类Vector281 11.4 Map接口283 11.4.1 ...

    疯狂JAVA讲义

    7.6.2 SortedMap接口和TreeMap实现类 276 7.6.3 WeakHashMap实现类 279 7.6.4 IdentityHashMap实现类 280 7.6.5 EnumMap实现类 281 7.7 HashSet和HashMap的性能选项 282 7.8 操作集合的工具类:Collections 283...

    程序员需要经常刷题吗-simple-java-zh-CN:SimpleJava是Java常见问题的集合。中文翻译

    4个访问级别 何时使用私有构造函数? 4.1 集合 ArrayList vs. LinkedList vs. Vector HashSet 与 TreeSet 与 LinkedHashSet HashMap vs. TreeMap vs. HashTable vs. LinkedHashMap 按值排序地图 高效计数器 HashMap ...

    21天学通Java-由浅入深

    232 11.7 习题 232 第12章 内部类(精彩视频:71分钟) 234 12.1 非静态内部类 234 12.1.1 创建非静态内部类 234 12.1.2 在外部类中访问内部类 235 12.1.3 在外部类外访问内部类 236 12.1.4 在内部类中访问外部类 ...

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    java_core_education_tasks

    任务2: 检查集合的速度差异(ArrayList与LinkedList,HashSet与TreeSet,HashMap与TreeMap); b。 创建用于确定花的层次结构的控制台应用程序。 创建几个花对象。 用价格决定收集一束。 使用OOP方法进行应用程序...

    DataStructureJava:主要数据结构——java中的简单实现

    interface Map<Key> TreeMap<K> HashMap<K> LinkedHashMap<K> Hashtable<K> extends Dictionary<K> - JDK 1.0 接口 Set TreeSet HashSet 树特里================== 问题: 如何使用两个堆栈实现队列? 答案:...

    Java开发技术大全 电子版

    11.2集合类的使用333 11.2.1顺序表(ArrayList)使用示例333 11.2.2链表(LinkedList)使用示例336 11.2.3优先队列(PriorityQueue)使用示例340 11.2.4哈希集合(HashSet)使用示例343 11.2.5哈希映射类...

Global site tag (gtag.js) - Google Analytics