java集合(HashSet)
2015-08-04 11:53
627 查看
import java.util.HashSet;
import java.util.Iterator;
/*
* !--Set:元素是无序(存入和取出的顺序不一定一致)元素不可以重复。
* !--HashSet:底层数据结构是哈希表。
* !--TreeSet:
* Set集合的功能和Collection是一致的。
* 哈希表:按照哈希值来存储,元素的哈希值相同,则比较元素的内容是否相同,一个hash值可以顺延存储很多元素。
*/
class Demo{
//自定义哈希值
public int hashCode()
{
return 60;
}
}
public class SetDemo {
public static void main(String[] args) {
/*Demo d1=new Demo();
Demo d2=new Demo();
//输出对象的哈希值
sop(d1);
sop(d2);*/
//定义HashSet容器
HashSet ha=new HashSet();
//添加元素,输出添加方法的(boolean)返回值。
sop(ha.add("java01"));
sop(ha.add("java01"));
ha.add("java02");
ha.add("java02");
ha.add("java03");
ha.add("java04");
//定义ha的迭代器
Iterator it=ha.iterator();
//输出容器元素
while (it.hasNext())
{
sop(it.next());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
/*
*HashSet是如何保证元素的唯一性:
*1.通过两个方法,hashCode和equals来完成。
*如果元素的HashCode值相同,才会判断equals是否为true。
*如果元素的hashCode值不同,才会调用equals。
*尽量保证hash值得唯一性。
*当往HahsSet里面添加元素时,集合底层会自动调用hashCode和equals方法。
*HashSet的判断和删除都是依赖于hashCode和equals方法。 先比较哈希值,再调用equals方法。
*/
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo {
public static void main(String[] args)
{
//定义一个HashSet容器
HashSet hs=new HashSet();
//添加元素
hs.add(new Person("a1",11));
hs.add(new Person("a2",12));
hs.add(new Person("a3",13));
// hs.add(new Person("a1",11));
//
hs.add(new Person("a4",14));
//判断容器食肉包含某对象
//
sop("a1:"+hs.contains(new Person("a2",12)));
//删除某对象
sop("a1:"+hs.remove(new Person("a2",12)));
//定义hs的迭代器
Iterator it=hs.iterator();
while (it.hasNext())
{
//向下转型,让obj能调用Person的方法。
Person p=(Person) it.next();
sop(p.getName()+"--"+p.getAge());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
//定义一个Person类
class Person{
//定义私有变量name和age
private String name;
private int age;
//定义Person的有参构造函数,并且对私有成员变量进行初始化。
Person(String name,int age)
{
this.name=name;
this.age=age;
}
//复写hashCode方法
public int hashCode(){
System.out.println(this.name+"--hashCode");
return name.hashCode()+age;
}
//复写equals方法
public boolean equals(Object obj)
{
if(!(obj instanceof Person) )
return false;
Person p=(Person) obj;
System.out.println(this.name+"---equals---"+p.name);
return this.name.equals(p.name)&&(this.age==this.age);
}
//为私有成员提供对外访问方式
public String getName()
{
return name;
}
//为私有成员提供对外访问方式
public int getAge()
{
return age;
}
}
import java.util.Iterator;
/*
* !--Set:元素是无序(存入和取出的顺序不一定一致)元素不可以重复。
* !--HashSet:底层数据结构是哈希表。
* !--TreeSet:
* Set集合的功能和Collection是一致的。
* 哈希表:按照哈希值来存储,元素的哈希值相同,则比较元素的内容是否相同,一个hash值可以顺延存储很多元素。
*/
class Demo{
//自定义哈希值
public int hashCode()
{
return 60;
}
}
public class SetDemo {
public static void main(String[] args) {
/*Demo d1=new Demo();
Demo d2=new Demo();
//输出对象的哈希值
sop(d1);
sop(d2);*/
//定义HashSet容器
HashSet ha=new HashSet();
//添加元素,输出添加方法的(boolean)返回值。
sop(ha.add("java01"));
sop(ha.add("java01"));
ha.add("java02");
ha.add("java02");
ha.add("java03");
ha.add("java04");
//定义ha的迭代器
Iterator it=ha.iterator();
//输出容器元素
while (it.hasNext())
{
sop(it.next());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
/*
*HashSet是如何保证元素的唯一性:
*1.通过两个方法,hashCode和equals来完成。
*如果元素的HashCode值相同,才会判断equals是否为true。
*如果元素的hashCode值不同,才会调用equals。
*尽量保证hash值得唯一性。
*当往HahsSet里面添加元素时,集合底层会自动调用hashCode和equals方法。
*HashSet的判断和删除都是依赖于hashCode和equals方法。 先比较哈希值,再调用equals方法。
*/
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo {
public static void main(String[] args)
{
//定义一个HashSet容器
HashSet hs=new HashSet();
//添加元素
hs.add(new Person("a1",11));
hs.add(new Person("a2",12));
hs.add(new Person("a3",13));
// hs.add(new Person("a1",11));
//
hs.add(new Person("a4",14));
//判断容器食肉包含某对象
//
sop("a1:"+hs.contains(new Person("a2",12)));
//删除某对象
sop("a1:"+hs.remove(new Person("a2",12)));
//定义hs的迭代器
Iterator it=hs.iterator();
while (it.hasNext())
{
//向下转型,让obj能调用Person的方法。
Person p=(Person) it.next();
sop(p.getName()+"--"+p.getAge());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
//定义一个Person类
class Person{
//定义私有变量name和age
private String name;
private int age;
//定义Person的有参构造函数,并且对私有成员变量进行初始化。
Person(String name,int age)
{
this.name=name;
this.age=age;
}
//复写hashCode方法
public int hashCode(){
System.out.println(this.name+"--hashCode");
return name.hashCode()+age;
}
//复写equals方法
public boolean equals(Object obj)
{
if(!(obj instanceof Person) )
return false;
Person p=(Person) obj;
System.out.println(this.name+"---equals---"+p.name);
return this.name.equals(p.name)&&(this.age==this.age);
}
//为私有成员提供对外访问方式
public String getName()
{
return name;
}
//为私有成员提供对外访问方式
public int getAge()
{
return age;
}
}
相关文章推荐
- java集合框架的体系结构详细说明
- Java集合类中文介绍
- 删除JAVA集合中元素的实现代码
- Java中HashMap和Hashtable及HashSet的区别
- 浅析Java中Map与HashMap,Hashtable,HashSet的区别
- 利用HashSet生成一组不重复的随机数
- Java.集合(学习笔记)
- 接口Set的特性及其实现类
- 可变java对象存入hashSet引发的问题
- JAVA基础之集合数组详解
- Java容器中的Set基本用法
- HashSet的实现原理
- [Java文档翻译] Collections Framework Overview 集合框架概览 (中英文对照)
- 集合关系图
- HashSet、LinkedHashSet、TreeSet使用区别
- 黑马程序员-ArrayList、HashSet比较和HashCode分析
- 黑马程序员---2015.6.21.java基础笔记---TreeSet---HashSet---HashMap
- connection集合和Map集合的区别
- hashSet 原理
- HashSet的存储机制