了解过HashMap和TreeMap后,学习HashSet和TreeSet就显得很简单了——二者底层分别基于前者来实现。

对于HashSet:

HashMap的底层实现通过HashMap完成
本质也是一个HashMap,但是根据Key值来存放,因此是具有不重复性
为了简便,所有的value都是一个object对象,PRESENT

至于其余的方法,也基本上是调用了HashMap的方法。

public boolean add(E e) {return map.put(e, PRESENT)==null;}
public void clear() {map.clear();}
public boolean remove(Object o) {return map.remove(o)==PRESENT;}
//。。。。。。

值得注意的就是HashSet的无序不可重复性,测试如下:

package myHashMap;
import java.util.HashSet;
import java.util.Set;
public class TestHashSet {public static void main(String[] args) {Set<String> hashSet=new HashSet<>();hashSet.add("a");hashSet.add("b");hashSet.add("a");System.out.println(hashSet);System.out.println(hashSet.size());}}

HashSet测试结果

对于TreeSet:

对比HaseSet——>TreeSet底层是有TreeMap实现,具有有序不可重复性的特点。

注:所谓无序和有序我的理解是——输出是否可以与插入元素顺序无关,无关则是有序,有关则是无序,就比如HashSet输出时的顺序总是和插入顺序一致,而TreeSet就可以按照key值排序。

测试如下:

package myHashMap;
import java.util.Set;
import java.util.TreeSet;
public class TestTreeSet {public static void main(String[] args) {Set<Integer> treeset = new TreeSet<>();treeset.add(300);treeset.add(100);treeset.add(400);System.out.println(treeset);Set<Emp1> treeset1=new TreeSet<>();treeset1.add(new Emp1(10, "张三", 2000));treeset1.add(new Emp1(2, "王五", 1000));treeset1.add(new Emp1(1, "李二", 2000));System.out.println(treeset1);}}class Emp1 implements Comparable<Emp1> {public Emp1(int id, String name, double salary) {super();this.id = id;this.name = name;this.salary = salary;}int id;String name;double salary;@Overridepublic String toString() {return "id=" + this.id + " name=" + this.name + " salary=" + this.salary;}@Overridepublic int compareTo(Emp1 o) {if (this.salary > o.salary) {return 1;} else if (this.salary < o.salary) {return -1;} else {if (this.id > o.id) {return 1;} else if (this.id < o.id) {return -1;} else {return 0;}}}}

TreeSet也可以和TreeMap一样按照key值递增排序

treeset可以重复吗_java容器(五)HashSet与TreeSet相关推荐

  1. HashSet 和 TreeSet 及 Map 集合的简单方法,含程序。

    HashSet 是一个什么样的容器呢? 在给HashSet容器对象添加元素时,利用散列函数.是无序的,不能添加相同元素的. package Set;import java.util.HashSet; ...

  2. Java容器源码分析-HashSet vs TreeSet vs LinkedHashSet

    2019独角兽企业重金招聘Python工程师标准>>> 这几天看了下容器的源码,总结一下HashSet vs TreeSet vs LinkedHashSet的区别, 如下图,col ...

  3. Java容器---Set: HashSet TreeSet LinkedHashSet

    1.Set接口概述        Set 不保存重复的元素(如何判断元素相同呢?).如果你试图将相同对象的多个实例添加到Set中,那么它就会阻止这种重复现象. Set中最常被使用的是测试归属性,你可以 ...

  4. 集合{LinkedHashMap TreeMap HashSet LinkedHashSet TreeSet 快速失败机制 ConcurrentHashMap CAS 多线程协同扩容}(二)

    目录标题 LinkedHashMap Map集合框架结构体系图 什么是LinkedHashMap Linked 链式 的意思 HashMap "哈希映射"的意思 LinkedHas ...

  5. HashSet、TreeSet、TreeMap实现原理

    一.HashSet底层实现 HashSet实现了Set接口,不允许有重复元素,因为HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap的key上面,而value中的值 ...

  6. java容器集合类的区别用法_Java容器笔记(二):不同集合实现类的特点与区别...

    package java.util包中的Collection相关接口和类如下图: Collection.png 仅讨论Java.util包中的常见集合类,不涉及java.util的子包concurre ...

  7. Java—Set集合详解(HashSet/LinkedHashSet/TreeSet/EnumSet)

    关注微信公众号:CodingTechWork,一起学习进步. Set集合介绍 Set集合的概念   Set集合类似于一个容器,程序把很多对象保存到Set集合中,Set集合对添加顺序不记录,当有重复的对 ...

  8. java 有序容器_Java 容器集合框架概览

    Java Collections Framework 集合的概念 集合collection,有时叫做容器container,把多个元素组成一个单元. 早期的Java (pre-1.2) 中包含了Vec ...

  9. java容器类添加元素失败失败_java容器 Set

    Set的简介 Set继承于Collection接口,是一个不允许出现重复元素,并且无序的集合,主要有HashSet和TreeSet两大实现类. 在判断重复元素的时候,Set集合会调用hashCode( ...

最新文章

  1. 秀秀博客大赛50强的礼物
  2. JAVA怎么创建对象组_java – 如何根据特定字段创建一组有序的对象?
  3. SparkSQL概述
  4. Java 洛谷 P2089 烤鸡
  5. mysql insert慢_MySQL insert语句慢查询的优化
  6. 如何在 Centos7 x86_64下将vim一键配置为一款强大的C++,IDE
  7. 3.6 Spark安装与体验
  8. java Comparable 和 Cloneable接口
  9. 计算机学院学生会会徽设计,学生会会徽设计策划书
  10. Netty权威指南——WebSocket协议开发
  11. Android pda出入库管理,仓库PDA扫描出入库管理系统
  12. GitLab使用教程(详细)(转载)
  13. CMS漏洞(发货100CMS、SHECMS、ZHCMS、MACCMS)详解实战
  14. c语言查看cpu温度代码_C语言获取CPU核心温度
  15. 一个劣质无线鼠标接收器导致笔记本无线网络连接出现故障
  16. Windows10无法启动防火墙
  17. 查看SQL语句执行耗费的时间
  18. 数据库防火墙的性能和高可用性分析
  19. Java实现扑克牌游戏(简易炸金花)
  20. 雷军、马云、马化腾控股的公司

热门文章

  1. [20160704]Block recover using RMAN.txt
  2. php数组的 需要注意的
  3. Oracle技巧集锦
  4. life words
  5. db2建库、建表空间基本流程
  6. 3 深入解析controlfile
  7. spring-mvc.xml与spring-mybatis.xml配置文件中命名空间问题
  8. Bat脚本处理ftp超强案例解说
  9. ThinkPHP框架 _ 学习11
  10. Webpack + vue + es6 安装