HashSet的自定义实现】的更多相关文章

1. HashSet存储自定义对象并遍历 2. 代码示例: (1)Student类,如下: package cn.itcast_02; /** * @author Administrator * */ public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name…
JAVA之旅(二十)-HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习 我们继续说一下集合框架 Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复 Set集合的功能和Collection是一致的 我们重点关注的是子类对象 我们来聊聊 一.HashSet HashSet底层结构是哈希表 什么是HashSet? package com.lgl.hellojava; //公共的 类 类名 public class HelloJ…
首先我们自定义Person类,只有姓名和年龄两个属性 class Person{ private String name ; private int age ; public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name…
问题: package day30_HashSet; import java.util.HashSet; /* * 通过hashset存储自定义对象,没有进行去重. * * */ public class HashSetSutdentDemo { public static void main(String[] args) { //创建集合对象 HashSet<Student> hs = new HashSet<Student>(); //创建元素对象 Student st = n…
HashSet集合存储自定义类型元素 HashSet存储自定义类型元素 set集合报错元素唯一: ~存储的元素(String,Integer,-Student,Person-)必须重写hashCode方法和equals方法 要求:同名同年龄的人,视为同一个人,只能存储一次 public static void main(String[] args) { //创建HashSet集合存储Person HashSet<Person> set = new HashSet<>(); Pers…
1. HashSet集合存储自定义对象并遍历.如果对象的成员变量值相同即为同一个对象 注意了: 你使用的是HashSet集合,这个集合的底层是哈希表结构. 而哈希表结构底层依赖:hashCode()和equals()方法. 如果你认为对象的成员变量值相同即为同一个对象的话,你就应该重写这两个方法. 如何重写呢?不同担心,自动生成即可. 2. 代码示例: (1)Dog.java: package cn.itcast_03; public class Dog { private String nam…
HashSet如何保证元素唯一性的原理 1.HashSet原理 a. 我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数 b. 当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象 c. 如果没有哈希值相同的对象就直接存入集合 d.如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equa…
上一篇http://blog.csdn.net/qq_32059827/article/details/51578158 写到存储字符串类型的时候出现了无序,而且这个无序不是随机那种无序,它是有一定存储规律的.上次存储的是字符串,那么这里看看存储自定义对象是不是也是同样的规律.其实这里有着很多的问题需要讨论. 存储自定义对象,代码写了出来: import java.util.HashSet; public class HashSetDemo2 { public static void main(…
package com.cy.collection; import java.util.HashMap; /** * HashSet自定义实现 * 是使用hashMap实现的 * 可以看一下HashSet的源码,非常简单,就是调用hashMap的实现 * @author CY * */ public class HashSet { private HashMap map; private static final Object PRESENT = new Object(); public Has…
  案例 package cn.itcast_02; import java.util.HashSet; /* * 需求:存储自定义对象,并保证元素的唯一性 * 要求:如果两个对象的成员变量值都相同,则为同一个元素. * * 目前是不符合我的要求的:因为我们知道HashSet底层依赖的是hashCode()和equals()方法. * 而这两个方法我们在学生类中没有重写,所以,默认使用的是Object类. * 这个时候,他们的哈希值是不会一样的,根本就不会继续判断,执行了添加操作. */ pub…
1 package cn.itcast.p4.hashset.test; 2 3 import java.util.HashSet; 4 import java.util.Iterator; 5 6 import cn.itcast.p.bean.Person; 7 /* 8 * 往hashSet集合中存储Person对象.如果姓名和年龄相同,视为同一个人.视为相同元素. 9 */ 10 public class HashSetTest { 11 12 public static void ma…
Java使用Set接口来描述集合,而Set中每一个数据元素都是唯一的. HashSet散列集合 Hash算法:把任意长度输入,通过散列算法,变换成固定长度的输出即散列值.对不同类型信息,散列值公式也是不完全相同的. 使用HashSet存储自定义类时,要重写equals和hashCode方法,以便在集合校验元素时(数据元素不允许重复),需要调用equals和hashCode验证(返回均为true). hashCode函数: public int hashCode()返回该对象的哈希码值.在重写父类…
1:Set集合(理解) (1)Set集合的特点 无序,唯一 (2)HashSet集合(掌握) A:底层数据结构是哈希表(是一个元素为链表的数组) B:哈希表底层依赖两个方法:hashCode()和equals() 执行顺序: 首先比较哈希值是否相同 相同:继续执行equals()方法 返回true:元素重复了,不添加 返回false:直接把元素添加到集合 不同:就直接把元素添加到集合 C:如何保证元素唯一性的呢? 由hashCode()和equals()保证的 D:开发的时候,代码非常的简单,自…
上一篇介绍了HashSet存储自定义自定义对象时应该注意的问题http://blog.csdn.net/qq_32059827/article/details/51580642, 这一篇对其内部结构稍作了解.用一张图,宏观认识,HashSet存储元素保证唯一性的原理: 其实HashSet的代码直接自动生成,这里也是了解即可.…
java.util.Set接口 extends Collection接口 Set特点: 1.不允许有重复的元素 2.没有索引,没有带索引的方法,也不能使用普通的for遍历 java.util.HashSet集合 implements Set接口 Set接口的一个实现类 HashSet特点: 1.没有重复的元素 2.没有索引,没有带索引的方法,也不能使用普通的for遍历 3.是一个无序的集合,存储和取出的顺序有可能不一致 4.底层是一个哈希表结构(查找快) public class Demo01S…
一.哈希值 1. 哈希值其实就是一个int数字,我们可以把哈希值看成对象的一个标识,Object中的hashCode方法,可以获取到对象的哈希值 2. Object中的hashCode方法是根据地址值进行计算的 3. 不过一般哈希值不是根据地址值计算,而是根据对象的属性进行计算,这就需要在Object的子类中重写hashCode方法(idea中一般都用alt+insert快捷键重写,部分电脑用alt+fn+insert快捷键重) 二.HashSet存储自定义对象 1.存储条件: HashSet存…
HashSet 集合 HashMap 集合 HashSet集合 1.1 Set 接口的特点 Set体系的集合: A:存入集合的顺序和取出集合的顺序不一致 B:没有索引 C:存入集合的元素没有重复 1.2 HashSet 使用&唯一性原理 1.2.1 HashSet的使用 1.2.1.1 案例代码一: public class HashSetDemo2 { public static void main(String[] args) { //创建集合对象 HashSet<Student>…
一.set接口 概念:set接口继承自Collection接口,与List接口不同的是,set接口所储存的元素是不重复的. 二.HashSet集合 概念:是set接口的实现类,由哈希表支持(实际上是一个HashMap集合).HashSet集合元素的提取顺序与存储顺序不相同. 采用哈希表数据结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法. 2.1哈希表 什么是哈希表? 链表与数组的组合. 哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时…
这么几个比较常用的但是比较容易混淆的概念同出于 java.util 包.本文仅作几个类的浅度解析. (本文基于JDK1.7,源码来自openjdk1.7.) ├── Collection │ ├── List │ │ ├── ArrayList │ │ ├── Vector │ │ └── LinkedList and so on; │ Set │ ├── HashSet │ └── LinkedHashSet and so on; └── Map ├── Hashtable ├── HashM…
一.数据结构:4种--<需补充> 1.堆栈结构:     特点:LIFO(后进先出);栈的入口/出口都在顶端位置;压栈就是存元素/弹栈就是取元素;     代表类:Stack;     其它:main方法最后一个出去; 2.数组结构:     特点:一片连续的空间;有索引,查找快;增删慢;     代表类:ArrayList;     应用场景:用于查询多的场景,如天气预报; 3.队列结构:     特点:FIFO(先进先出);入口/出口在两侧;     代表:Queue接口     应用场景…
集合中的HashSet底层是通过Hash表实现,HashSet的特点是元素唯一,但用到Hash表就跟hashCode()有了密不可分的联系,所以HashSet的唯一性是通过hashCode()方法来保证,当然光有HashCode()还不够,还有equals()也用到.从底层(HashMap的put()方法)实现代码来看,就可以清楚地看到这一点. public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(thre…
目录 List接口 1.1 List接口介绍 1.2 List接口中常用方法 List的子类 2.1 ArrayList集合 2.2 LinkedList集合 Set接口 3.1 Set接口介绍 Set接口子类 4.1 HashSet集合介绍 4.2 HashSet集合存储数据的结构(哈希表) 4.3源码分析 4.4 HashSet存储自定义类型元素 4.5 LinkedHashSet 前言 在之前的博客文章中已经介绍了Collection接口使用,本篇将介绍Collection接口中的子类的用…
Set接口 java.util.Set接口 extends Collection接口 Set接口的特点: 不允许存储重复的元素 没有索引,没有带索引的方法,也不能使用普通的for循环遍历 java.util.HashSet集合 implements Set接口 HashSet特点: 不允许存储重复的元素 没有索引,没有带索引的方法,也不能使用普通的for循环遍历 是一个无序的集合,存储元素和取出元素的顺序有可能不一致 底层是一个哈希表结构(查询的速度非常快) Set<Integer> set…
一.概述 java.util.HashSet  是 Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致). java.util.HashSet 底层的实现是一个 java.util.HashMap 支持. HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存储区和查找性能.保证元素唯一性的方式依赖于:hashCode 与 equals 方法. 特点: 1. 不允许存储重复的元素 2. 没有索引,也没有带索引的方法,不能使用普通…
Set接口 java.util.set接口继承自Collection接口,它与Collection接口中的方法基本一致, 并没有对 Collection接口进行功能上的扩充,只是比collection接口更加严格了. set接口中元素是无序的,并且都会以某种规则保证存入的元素不出现重复. 简述其特点就是: 不允许存储重复的元素 没有索引,也没有带索引的方法,不能使用普通的for循环遍历 Set接口有多个实现类,java.util.HashSet是其常用的子类 下面介绍一下set接口的实现类Has…
List集合介绍及常用方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* java.util.List接口 extends Collection接口 List接口的特点: 1.有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123) 2.有索引,包含了一些带索引的方法 3.允许存储重复的元素 List接口中带索引的方法(特有) -public void add(int…
本文已收录<Java常见面试题>系列,Git 开源地址:https://gitee.com/mydb/interview HashSet 实现了 Set 接口,由哈希表(实际是 HashMap)提供支持.HashSet 不保证集合的迭代顺序,但允许插入 null 值.也就是说 HashSet 不能保证元素插入顺序和迭代顺序相同. HashSet 具备去重的特性,也就是说它可以将集合中的重复元素自动过滤掉,保证存储在 HashSet 中的元素都是唯一的. 1.HashSet 基本用法 HashS…
HashSet存储自定义数据类型 public class Test{ /** * HashSet存储自定义数据类型 * set集合保证元素唯一:存储的元素(String,Integer,Student,Person),必须重写hashCode和equals方法 * * 要求: * 同名同龄的人,视为同一个人,只能存储一次 */ public static void main(String[] args) { HashSet<Person> set = new HashSet<>(…
List集合 一.ArraryList: 最基本的集合不多做介绍 二.Vector Vector cn=new  Vector(); A:有特有功能 a:添加       public void addElement(E obj) -- add() cn.addElement(object e);         b:获取              public E elementAt(int index) -- get() cn.elementAt(int index) ;         …
Day14 08 LinkedList09 LinkedList练习10 ArrayList练习11 ArrayList练习2 12 HashSet13 HashSet存储自定义对象14 HashSet判断和删除的依据 08 LinkedList LinkedList特有的方法:addFirst() addLast() getFirst() getLast()获取元素,但不删除元素.如果集合中没有元素,会出现NoSuchElementException. removeFirst() remove…