package com.wzy.list;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet; class Student1 implements Comparable{
private Integer id;
private String name; public Student1(String name,Integer id) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "name:"+name+"; id:"+id;
}
@Override
public int compareTo(Object o) {
if(this.id > ((Student1)o).id) {
return ;
}else if(this.id < ((Student1)o).id) {
return -;
}else{
return this.name.compareTo(((Student1)o).name);
} }
} class Student2{
private Integer id;
private String name; public Student2(String name,Integer id) {
this.id = id;
this.name = name;
} @Override
public int hashCode() {
final int prime = ;
int result = ;
result = prime * result + ((id == null) ? : id.hashCode());
result = prime * result + ((name == null) ? : name.hashCode());
return result;
} @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student2 other = (Student2) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
} @Override
public String toString() {
return "Student2 [id=" + id + ", name=" + name + "]";
} }
public class Test02 {
public static void main(String[] args) {
/**
* TreeSet和HashSet存入对象时,不会自动去重操作
*
* TreeSet去掉重复对象,基于Comparable接口实现
* HashSet去掉重复对象,基于equals和hashCode实现
* TreeSet可以对象排序,hashSet不可以
*
* 如果存入的不是new出来的对象,
* 而是String或int类型,可以直接使用,不必实现上述操作
* **/ //TreeSet存入对象实例
Set<Student1> stu1 = new TreeSet<Student1>();
stu1.add(new Student1("aa",));
stu1.add(new Student1("bb",));//id重复
stu1.add(new Student1("dd",));
stu1.add(new Student1("cc",));
stu1.add(new Student1("aa",));//对象重复
Iterator s = stu1.iterator();
while(s.hasNext()) {
System.out.println(s.next());
} //HashSet存入对象实例
Set<Student2> stu2 = new HashSet<Student2>();
stu2.add(new Student2("aa",));
stu2.add(new Student2("bb",));
stu2.add(new Student2("cc",));
stu2.add(new Student2("dd",));
stu2.add(new Student2("ee",));
stu2.add(new Student2("aa",)); Iterator i = stu2.iterator();
while(i.hasNext()) {
System.out.println(i.next());
} //TreeSet存入普通字符串
Set set1 = new TreeSet();
set1.add("a");
set1.add("aa");
set1.add("d");
set1.add("b");
set1.add("c");
//[a, aa, b, c, d] TreeSet已经自动排序好了
System.out.println(set1); //HashSet存入普通字符串
Set set2 = new HashSet();
set2.add("a");
set2.add("aa");
set2.add("d");
set2.add("c");
set2.add("b");
//[aa, a, b, c, d] HashSet不会排序
System.out.println(set2);
}
}

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. Setting my home here

    New here (For no chinese input on this machine, I have to use English.) Why do I choose here ? Whene ...

  2. Java 集合框架

    Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...

  3. 在Intellij IDEA 下通过Maven新建项目的一些体会

    因为习惯的原因,一直在用jetbrain的IDE,最近的在开发javaEE项目,并尝试用maven来管理依赖,那这中间又出了什么让我不得不写下来的呢 一.先来看看在IDEA下怎么用maven建项目 1 ...

  4. 从零开始学Python06作业源码(仅供参考)

    Python Version 2.7x 一,bin目录:程序启动入口 SelectLesson_start.py #!usr/bin/env python # -*- coding:utf-8 -*- ...

  5. WNMP集成环境下配置thinkPHP

    在网上查了许多解决方法,下面是自己测试过能行的方法,只需在nginx.conf文件添加内容就可以了. 打开nginx.conf文件 ## Try the requested URI as files ...

  6. 001.Getting Started -- 【入门指南】

    Getting Started 入门指南 662 of 756 people found this helpful Meng.Net 自译 1. Install .NET Core 到官网安装 .NE ...

  7. jQuery基础_4

    dom对象就是jquery对象的数组组成部分jquery对象和dom对象的转化jquery对象-->dom对象$()[下标]dom对象-->jquery对象$(dom对象) jquery框 ...

  8. 关于如何在Android、Java等非微软平台上建立高信任的SharePoint应用程序

    关于如何在非微软平台上建立高信任的SharePoint应用程序 原文 :http://blogs.msdn.com/b/kaevans/archive/2014/07/14/high-trust-sh ...

  9. 在C#开发中如何使用Client Object Model客户端代码获得SharePoint 网站、列表的权限情况

    自从人类学会了使用火,烤制的方式替代了人类的消化系统部分功能,从此人类的消化系统更加简单,加速了人脑的进化:自从SharePoint 2010开始有了Client Side Object Model ...

  10. CSS的一些基础知识

    <!DOCTYPE html><html><head><meta charset="utf-8"><title>标题&l ...