1、TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值

2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束

一、HashSet

1.HashSet存字符串

import java.util.*;
class Student {

String id;

String name;

public Student(String id,String name) { // 创建构造方法

this.id=id;

this.name = name;

}

public String toString() { // 重写toString()方法

return id+":"+name;

}

}

public class Example10 {

public static void main(String[] args) {

HashSet hs = new HashSet(); // 创建HashSet集合

Student stu1 = new Student("1", "Jack"); // 创建Student对象

Student stu2 = new Student("2", "Rose");

Student stu3 = new Student("2", "Rose");

hs.add(stu1);

hs.add(stu2);

hs.add(stu3);

System.out.println(hs);

}

}

2.HashSet存对象

import java.util.*;

class Student {

private String id;

private String name;

public Student(String id, String name) {

this.id = id;

this.name = name;

}

// 重写toString()方法

public String toString() {

return id + ":" + name;

}

// 重写hashCode方法

public int hashCode() {

return id.hashCode(); // 返回id属性的哈希值

}

// 重写equals方法

public boolean equals(Object obj) {

if (this == obj) { // 判断是否是同一个对象

return true; // 如果是,直接返回true

}

if (!(obj instanceof Student)) { // 判断对象是为Student类型

return false; // 如果对象不是Student类型,返回false

}

Student stu = (Student) obj; // 将对象强转为Student类型

boolean b = this.id.equals(stu.id); // 判断id值是否相同

return b; // 返回判断结果

}

}

public class Example11 {

public static void main(String[] args) {

HashSet hs = new HashSet(); // 创建HashSet对象

Student stu1 = new Student("1", "Jack"); // 创建Student对象

Student stu2 = new Student("2", "Rose");

Student stu3 = new Student("2", "Rose");

hs.add(stu1); // 向集合存入对象

hs.add(stu2);

hs.add(stu3);

System.out.println(hs); // 打印集合中的元素

}

}

二、TreeSet

import java.util.*;
class MyComparator implements Comparator { // 定义比较器实现Comparator接口
public int compare(Object obj1, Object obj2) { // 实现比较方法
String s1 = (String) obj1;
String s2 = (String) obj2;
int temp = s1.length() - s2.length();
return temp;
}
}
public class Example14 {
public static void main(String[] args) {
TreeSet ts = new TreeSet(new MyComparator());// 创建TreeSet对象时传入自定义比较器
ts.add("Jack");// 向该Set对象中添加字符串
ts.add("Helena");
ts.add("Eve");
Iterator it = ts.iterator(); // 获取Iterator对象
// 通过while循环,逐渐将集合中的元素打印出来
while (it.hasNext()) {
// 如果Iterator有元素进行迭代,则获取元素并进行打印
Object obj = it.next();
System.out.println(obj);
}
}
}

HashSet与TreeSet的更多相关文章

  1. HashSet 与TreeSet和LinkedHashSet的区别

    Set接口      Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.      Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就 ...

  2. HashSet vs TreeSet vs LinkedHashSet

    使用Set集合的主要原因是因为Set集合里面没有重复的元素.Set集合有三个常见的实现类:HashSet,TreeSet,LinkedHashSet.什么时候,选择哪一个使用非常重要.简单的说,如果你 ...

  3. Set集合——HashSet、TreeSet、LinkedHashSet(2015年07月06日)

    一.Set集合不同于List的是: Set不允许重复 Set是无序集合 Set没有下标索引,所以对Set的遍历要通过迭代器Iterator 二.HashSet 1.HashSet由一个哈希表支持,内部 ...

  4. HashSet和TreeSet 的区别与分析

    Set是java中一个不包含重复元素的collection.更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素.正如其名称所暗示的, ...

  5. java集合系列——Set之HashSet和TreeSet介绍(十)

    一.Set的简介 Set是一个不包含重复元素的 collection.更确切地讲,set 不包含满足 e1.equals(e2) 的元素.对 e1 和 e2,并且最多包含一个为 null 的元素. S ...

  6. HashSet,LinkedHashSet,TreeSet的区别

    Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用eq ...

  7. Java集合详解7:HashSet,TreeSet与LinkedHashSet

    今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之前文章的三个map进行实现的,所以推荐大家先看一下前面有关map的文章,结合 ...

  8. Java开发笔记(六十五)集合:HashSet和TreeSet

    对于相同类型的一组数据,虽然Java已经提供了数组加以表达,但是数组的结构实在太简单了,第一它无法直接添加新元素,第二它只能按照线性排列,故而数组用于基本的操作倒还凑合,若要用于复杂的处理就无法胜任了 ...

  9. 【java提高】---HashSet 与TreeSet和LinkedHashSet的区别

    HashSet 与TreeSet和LinkedHashSet的区别 今天项目开发,需要通过两个条件去查询数据库数据,同时只要满足一个条件就可以取出这个对象.所以通过取出的数据肯定会有重复,所以要去掉重 ...

  10. Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 上一篇总结了下ArrayList .LinkedList和Vector比较,今天泥瓦匠总结下Hash ...

随机推荐

  1. pdf解析与结构化提取

    #PDF解析与结构化提取##PDF解析对于PDF文档,我们选择用PDFMiner对其进行解析,得到文本.###PDFMinerPDFMiner使用了一种称作lazy parsing的策略,只在需要的时 ...

  2. Python内置函数(43)——type

    英文文档: class type(object) class type(name, bases, dict) With one argument, return the type of an obje ...

  3. api-gateway实践(01)服务网关 - 原型功能

    一.服务注册 1.增加组:LsqGrpA 2.增加版本:LsqVerA 3.增加api:LsqApiA 3.1.基本信息 3.2.前端定义 3.3.后端定义 二.服务上线和服务授权 1.服务上线 2. ...

  4. C#实现导出Excel

    这段时间用到了导出Excel的功能,这个功能还是比较常用的,我常用的有两个方法,现在整理一下,方便以后查看. 一.实现DataTable数据导出到本地,需要自己传进去导出的路径. /// <su ...

  5. webpack打包性能优化

    1. 使用 gzip 压缩打包后的 js 文件 这个方法优化浏览器下载时的文件大小(打包后的文件大小没有改变) webpack.config.prod.js 中 var CompressionWebp ...

  6. UIView圆角设置

    对于UIview的圆角设置最简单的就是layer的两个属性分别是cornerRadius和masksToBounds,但是对于设置其中某一个角为圆角的时候需要使用贝塞尔曲线 UIView *aView ...

  7. Qt编译oci教程

    Qt编译OCI教程 上图oci.dll 不是oci.lib 我很奇怪网上大部分教程都是写的oci.lib,其实大家可以去oracle目录找一下这个文件,看看是不是在这个目录,我找了一下没发现.而lib ...

  8. Java-NIO(四):通道(Channel)的原理与获取

    通道(Channel): 由java.nio.channels包定义的,Channel表示IO源与目标打开的连接,Channel类似于传统的“流”,只不过Channel本身不能直接访问数据,Chann ...

  9. hash详解

    首先介绍一下hash? 事实上是一种叫做蛤丝的病毒 hash的做法: 首先设一个进制数base,并设一个模数mod 而哈希其实就是把一个数转化为一个值,这个值是base进制的,储存在哈希表中,注意一下 ...

  10. Python数据类型深入学习之字符串

    一. Python字符串 1. 下面来看一下python中常见字符串常量和表达式: Python中用来编写字符串的方法有以下几种: (1) 单引号:'speade' (2) 双引号:"spe ...