HashTree:底层数据结构是:哈希表,线程不安全(其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75,如果对于迭代性能要求比较高,对加载因子设置降低或者默认),通过hashCode方法和equals方法来保证元素的唯一性。
/** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has * default initial capacity (16) and load factor (0.75). */ public HashSet() { map = new HashMap<E,Object>(); }
比较原理:先判断类中的属性各个hashcode 计算的值,如hashcode值相同才会去判断equals,否则,是不会调用equals方法的。
根据以上原理得知,我们必须要重写hashcode()和equals()方法,
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class Student { private static final long serialVersionUID = 1L; private String id; private String name; private int age; public Student(String id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } public Student() { super(); // TODO Auto-generated constructor stub } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", age=" + age + "]"; } @Override public int hashCode() { final int prime = 31;// 为什么是31,可以思考一下,到时再整理出来 int result = 1; result = prime * result + age; result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); System.out.println("hashCode method :" + result); 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 (age != other.age) { return true; } 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; } public static void main(String[] args) { Set<Student> set = new HashSet<Student>(); Student student1 = new Student("1", "Tom", 16); Student student2 = new Student("2", "Lucy", 13); Student student2_1 = new Student("2", "Lucy", 13); Student student3 = new Student("3", "Peter", 14); set.add(student1); set.add(student2); set.add(student2_1); set.add(student3); Iterator<Student> iterator = set.iterator(); while (iterator.hasNext()) { Student next = iterator.next(); System.out.println(next.getName() + " :" + next.getAge()); } } }
同样contains(obj)方法中,也对比顺序是 hashCode 和equals(o) 代码如下
/** * Returns the entry associated with the specified key in the * HashMap. Returns null if the HashMap contains no mapping * for the key. */ final Entry<K,V> getEntry(Object key) { int hash = (key == null) ? 0 : hash(key.hashCode()); for (Entry<K,V> e = table[indexFor(hash, table.length)]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) return e; } return null; }
相关推荐
在Java编程中,集合框架是处理对象集合的重要工具,提供了多种数据结构和操作方式。本实验主要关注两个方面...同时,也对XML编程有了初步的认识。在实际编程中,根据需求选择合适的集合类型和XML处理方法是非常关键的。
13. **Java EE基础**:对Java企业级开发有一个初步认识,包括Servlet、JSP和MVC模式。 14. **数据库操作**:掌握JDBC(Java Database Connectivity),了解如何连接数据库,执行SQL语句,处理结果集。 15. **设计...
"程序,帮助初学者建立起对编程的初步认识。 书中详尽地讲解了变量、数据类型、运算符、控制流(条件语句和循环结构)等基础概念。通过实例,读者可以学习到如何声明和使用变量,理解不同数据类型的特点,以及如何...
十五天的学习时间虽短,但通过有计划地学习和实践,你将能够建立起对Java的初步认识,为后续深入学习打下坚实基础。记住,理论知识与实际编程相结合,不断练习和解决问题是提升技能的关键。祝你在Java学习的道路上越...
通过《21天学通Java》的系统学习,初学者不仅能够掌握Java编程的基本技能,还能建立起对整个Java生态系统的初步认识。无论是为了个人兴趣还是职业发展,这本书都是一份宝贵的资源。同时,配合实际编程练习,将理论...
本章“TP01”着重讲解Java语言的入门知识,帮助学员建立起对Java编程的初步认识。 1. **Java简介**:Java是由Sun Microsystems公司(现已被Oracle收购)于1995年推出的面向对象的编程语言,以其“一次编写,到处...
在Java基础教程部分,首先会介绍Java的历史和应用领域,让学习者对这门语言有一个初步的认识。接着,会深入讲解Java的环境搭建,包括JDK的下载、安装以及配置环境变量,这是开始编程的第一步。 课程会逐步引导学习...
这一部分是入门的基础,让读者对Java有一个初步的认识。 第二章至第四章会逐步讲解Java的基本语法,如数据类型、变量、常量、运算符、控制结构(如if语句和循环)等。这些内容构成了程序的基本骨架,是编写任何程序...
1. **Java简介**:介绍Java的历史、特点、应用领域以及与其它编程语言的对比,使学习者对Java有一个初步认识。 2. **环境配置**:讲解如何安装Java Development Kit (JDK) 和设置环境变量,为后续开发工作奠定基础...
这一部分让初学者对Java有一个初步的认识,知道它为何被广泛应用,以及如何在自己的计算机上建立开发环境。 接下来,`ch3.ppt`深入讲解了Java的语法基础,如数据类型、变量、运算符、流程控制语句(如if、switch、...
尽管这个教程分为两部分,但每部分都可以独立学习,因为内容是连贯的,所以即使只学习第一部分,也能获得对Java编程的初步认识。为了深入学习,建议读者按照教程顺序逐步学习,并结合实践,编写自己的Java程序,从而...
通过学习这些内容,初学者不仅能了解JAVA的常用类,还能建立起对JAVA标准库的初步认识,为后续的进阶学习打下坚实的基础。在实际编程中,熟练运用这些类可以大大提高代码的效率和可读性。因此,掌握第五章的内容对于...
",让学员对Java编程有个初步认识。 **Day02-03: Java语法基础** 这部分涵盖了Java的基础语法,如变量、数据类型(包括基本类型和引用类型)、运算符、流程控制语句(if、switch、for、while等)、数组的声明、初始...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...通过学习这些内容,读者可以建立起对Java编程的初步认识,并为进一步深入学习和实践打下坚实基础。
14. **Java EE**:简述Java企业版,包括Servlet、JSP、Filter、Listener等Web开发技术,以及MVC设计模式和Spring框架的初步认识。 通过【Java课件_张孝详】中的内容,学习者可以系统性地学习Java编程,逐步提高编程...
Java简易基础(速成版)课程...通过这个速成版的Java简易基础课程,你可以快速建立起对Java编程的初步认识,并具备基本的编程能力。然而,Java语言的深度和广度远不止于此,深入学习和实践将是持续提升编程技能的关键。
本书首先会介绍Java的历史和发展,让读者对这门语言有初步的认识。接下来,会详细讲解Java环境的搭建,包括JDK(Java Development Kit)的下载与安装,以及配置Java开发环境变量。 在基础语法部分,读者会学习到...
1. **Java基础**:Java语言的基础包括数据类型(如整型、浮点型、字符型和布尔型)、变量、运算符、流程控制(如if语句、switch语句、for循环、while循环等)、方法定义和调用,以及类和对象的初步认识。 2. **面向...
- **intro.pdf**:通常是对全书内容的概览,帮助读者对整个学习过程有个初步认识。 - **preface.pdf**:前言部分,作者可能会分享写作动机、目标读者以及本书的结构。 10. **其他**: - **chap5**、**chap6**等...
在Java编程中,集合是存储和管理对象的重要工具。在暑期Java实训的第二天,学员们...通过这一天的学习,学员们不仅掌握了集合的基本操作,还对抽象类、接口和IO流有了初步的认识,为后续的编程实践打下了坚实的基础。