HashSet和TreeSet都实现了Collection下的Set接口,他们实现的原理分别是HashMap和TreeMap,基本的数据结构是哈希表和Red-Black Tree

package com.pason.hashset;

import java.util.HashSet;

import java.util.Iterator;

public class HashSetDemo {

public static void main(String[] args) {

HashSet student = new HashSet();

Student stu1 = new Student("Pason",123);

Student stu2 = new Student("Wade",456);

Student stu3 = new Student("Lee",789);

Student stu4 = new Student("Wong",123);

student.add(stu1);

student.add(stu2);

student.add(stu3);

student.add(stu4);

System.out.println(student.size());

//打印的都是Student对象的toString()方法

System.out.println("======================");

//forEach方法遍历

for (Student s: student)

System.out.println(s);

System.out.println("======================");

//直接打印hashSet对象

System.out.println(student);

System.out.println("======================");

//迭代器

Iterator stu = student.iterator();

while(stu.hasNext()){

System.out.println(stu.next());

}

System.out.println("======================");

//加入重复元素发现对象加不进去

student.add(stu3);

System.out.println(student);

//如何定义对象是否重复呢?

//需要重写equals()和hashCode()方法,一般在Eclipse中

//自动根据类中字段属性重写

//现在重写Student中的equals()和hashCode()方法

//仅根据id判断是否一致,这样stu4因为与stu1的id一致,所以只加入了3个

//如果修改某个hashset中元素的能够决定hashcode和equals()的因素,那么修改后该元素无法移除

//原因和HashMap有关

stu3.setId(111);

student.remove(stu3);

System.out.println("======================");

System.out.println(student);

System.out.println("发现无法移除,但该改变可见!");

}

}

package com.pason.hashset;

public class Student {

private String name;

private int id;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String toString() {

return "Student [name=" + name + ", id=" + id + "]";

}

public Student(String name, int id) {

super();

this.name = name;

this.id = id;

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + id;

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Student other = (Student) obj;

if (id != other.id)

return false;

return true;

}

}

java使用hashset_Java集合(二)HashSet的使用相关推荐

  1. java中 hashset_Java中的HashSet

    HashSet扩展AbstractSet并实现Set接口.它创建一个使用哈希表进行存储的集合. 哈希表通过使用称为哈希的机制来存储信息.在散列中,键的信息内容用于确定唯一值,称为其散列码. 然后,将哈 ...

  2. 常见的数据结构:栈 队列 数组 链表 红黑树——List集合 _ HashSet集合、可变参数 collections集合 Map集合

    2021-06-07复习java 一.常见的数据结构 栈(先进后出) 队列 数组 链表 红黑树 二.List集合_介绍&常用方法 ArrayList集合 Linkedlist集合 三.Hash ...

  3. java list 前100个_实现java 中 list集合中有几十万条数据,每100条为一组取出

    解决"java 中 list集合中有几十万条数据,每100条为一组取出来如何实现,求代码!!!"的问题. 具体解决方案如下: /** * 实现java 中 list集合中有几十万条 ...

  4. Java中Set集合的用法

    java.util.Set 接口 extends Collection接口 1.Set接口的特点: (1)不允许存储重复的元素. (2)没有索引,没有带索引的方法,也不能使用普通的for循环遍历. 2 ...

  5. 考考基础部分,谈谈Java集合中HashSet的原理及常用方法

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:工匠初心 cnblogs.com/LiaHon/p/1125 ...

  6. java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍

    转载自  java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍 这一节我们来接着介绍JUC集合:CopyOnWrite ...

  7. java学习记录十五:集合二Collections、Set、Map

    java学习记录十五:集合二 一.Collections工具类 一.解释 二.常用方法 1.打乱集合顺序 2.按照默认规则排序 3.按指定规则排序 4.批量添加元素 二.可变参数 一.解释 二.写法 ...

  8. Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)

    文章目录 Java基础知识(二) 1.Object类的常用方法 1.1 toString方法 1.2 equals方法 1.3 Objects类 2.日期时间类 2.1 Date类 2.2 DateF ...

  9. java se系列(十二)集合

    1.集合 1.1.什么是集合 存储对象的容器,面向对象语言对事物的体现,都是以对象的形式来体现的,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式.集合的出现就是为了持有对象.集 ...

最新文章

  1. 我有点不喜欢分布式中的TCC模式了
  2. 结合泛函极值_泛函极值及变分法教程.doc
  3. daily scrum 12.9
  4. hashmap value占用空间大小_求比HashMap占用内存少的查找方法
  5. android 4.4.2截屏方法,android4.4.2 使用 uiautoviewer 截屏报错
  6. linux下安装dovecot
  7. 打通版微社区(1):PHP环境部署 for DZX3.2
  8. Object-C---gt;Swift之(十一)属性观察者
  9. 【转载】jQuery框架
  10. 哈勃分析系统解密:中招敲诈木马不用交赎金
  11. 了解RecyclerView的分割线
  12. [18调剂]上海海洋大学2018年硕士研究生调剂政策与规则
  13. 在类xx中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)否则 JavaFX 应用程序类必须....
  14. 张凯龙 西北工业大学计算机学院,张凯龙的个人主页-西北工业大学教师个人主页...
  15. BBUCTF消失的MD5题解
  16. 怎么修改证件照尺寸?这个方法可以轻松修改
  17. 魔域服务器修改和宝宝数据,宝宝属性与真实值之间的公式计算关系
  18. 手机电池电量剩余通知
  19. register at least one qt version using“qt vs tools“->“qt options“
  20. 门户通专访月光博客:第一博客是如何打造成的

热门文章

  1. 【Flink】Flink 1.10之改进的TaskManager内存模型与配置
  2. 【Flink】Flink 使用 CopyOnWriteArrayList 进行数据缓存的时候 一个bug
  3. 【Clickhouse】实时日志数据写入Clickhouse
  4. Spring Boot : Spring Boot Slf4j 以及 log4j 以及门面日志
  5. 工具包:Safetype Config使用
  6. Druid : 慢SQL统计与监控
  7. maven如何直接手动下载jar包
  8. 【git】git如何添加本地不是git的项目到Git库中
  9. Servlet之过滤器详解
  10. php得到第一个数组_php怎么获取数组第一个元素