package com.itcast.set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
*
* Set:元素不可以重复,是无序。
Set接口中的方法和Collection一致。
|--HashSet: 内部数据结构是哈希表 ,是不同步的。
如何保证该集合的元素唯一性呢?
是通过对象的hashCode和equals方法来完成对象唯一性的。
如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。
记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。
一般情况下,如果定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。
建立对象判断是否相同的依据。
*
*/
public class HashDemo1 {
public static void main(String args[])
{
Set set=new HashSet();
set.add(new StudentBean(12, "list1"));
set.add(new StudentBean(13, "list2"));
set.add(new StudentBean(14, "list3"));
set.add(new StudentBean(12, "list1"));
Iterator it=set.iterator();
while(it.hasNext())
{
StudentBean stu=(StudentBean)it.next();
System.out.println(stu.getName()+"age"+stu.getAge());
}
}
}
package com.itcast.set;
public class StudentBean {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public StudentBean(int age, String name) {
super();
this.age = age;
this.name = name;
}
public StudentBean() {
super();
}
@Override
public boolean equals(Object obj) {
if(this==obj)
{
return true;
}
if(!(obj instanceof StudentBean) )
{
throw new ClassCastException("类型不对");
}
StudentBean stu=(StudentBean)obj;
return this.name.equals(stu.getName())&&this.age==stu.age;
}
@Override
public int hashCode() {
return name.hashCode()+this.age*37;
}
@Override
public String toString() {
return this.name+":"+this.age;
}
}
package com.itcast.set;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListDemo1 {
/*
* 定义功能去除ArrayList中的重复元素。
*/
/**
* @param args
*/
public static void main(String[] args) {
List list=new ArrayList();
list.add("abc");
list.add("abc2");
list.add("abc2");
getSingleList(list);
List list2=new ArrayList();
list2.add(new StudentBean(12, "aa"));
list2.add(new StudentBean(13, "aa2"));
list2.add(new StudentBean(12, "aa"));
getSingleList(list2);
}
private static void getSingleList(List list) {
// TODO Auto-generated method stub
ArrayList temp=new ArrayList();
Iterator it=list.iterator();
while(it.hasNext())
{
Object obj=it.next();
if(!temp.contains(obj))
{
temp.add(obj);
}
}
System.out.println(temp);
}
}
相关推荐
java中的哈希算法和hashcode深入讲解1
java中hashCode()的理解
记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。 一般情况下,如果自定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。 建立对象判断是否相同的依据。...
set集合是无序的相较于list集合是没有下标的,hashset底层去重,与hashCode、equals方法相关,排序的元素不是String,而是对象Person
主要给大家介绍了关于Java中HashCode方法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
本文档详细介绍了set接口为什么会用到hashCode和equals方法以及这两个方法的一些探讨 set不同的实现类用到的这两个方法也不同
java中Hashcode的作用
掌握集合的概念、体系结构、分类及使用场景 2)了解Set接口及主要实现类(HashSet...1、集合中的List、Set、Map有哪些不同? 2、为什么使用集合框架,而尽可能少用数组作为存储结构? 3、如何使用TreeSet实现第一题?
实际上,hashcode根本不能代表object的内存地址。
Java集合中有两类,一类是List,一类是Set他们之间的区别就在于List集合中的元素师有序的,且可以重复,而Set集合中元素是无序不可重复的。对于List好处理,但是对于Set而言我们要如何来保证元素不重复呢?通过迭代...
HashCode相同equals不同的2位字符集合算法 另附ASCII码表
有许多人学了很长时间的Java,但一直不明白hashCode方法的作用以及equals()和==的区别,我来解释一下吧。...总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。你知道它们的区别吗?
很多密码都是哈希后保存的,由于哈希码由不可逆的函数生成,我们没有办法直接解密。如果要快速破解这类码值,综合使用多种资源……
主要介绍了深入理解Java中HashCode方法,具有一定借鉴价值,需要的朋友可以参考下
本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示...通过统一定义equals()和hashCode(),可以提升类作为基于散列的集合中的关键字的使用性。
hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。 hashCode 的常规协定是: 在Java应用程序执行期间,在同一对象上多次调用 hashCode 方法...
要注意的是List,Set,Queue继承了Collection接口,...这里想用一个简单的例子展示一下他们的使用,内容包括:List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类,泛型、重写equals、hashCode
Java中入HashMap等一些键值对应的结构,基本上都可以用hashCode()来查找值,接下来我们就来详解Java中用于查找对象哈希码值的hashCode()函数:
更清楚的了解hashcode()和equals()方法。
哈希表节点结构 struct Node:表示哈希表中的一个节点,包含键、值以及指向下一个节点的指针。 哈希表结构 struct HashTable:表示哈希表,包含一个存储节点指针的数组。 创建哈希表函数 createHashTable:动态...