黑马程序员技术交流社区
标题:
重点问题2关于HashSet类的使用金币帖
[打印本页]
作者:
温立华
时间:
2013-3-19 19:52
标题:
重点问题2关于HashSet类的使用金币帖
本帖最后由 温立华 于 2013-3-19 22:11 编辑
关于HashSet类的使用?都是些经典的问题.作为积累.希望大神回答.金币帖!
作者:
郝强勇
时间:
2013-3-19 19:56
沙发抢到!!!
作者:
杜超
时间:
2013-3-19 19:58
抢一个再说
作者:
郝强勇
时间:
2013-3-19 20:03
hashSet的使用?这个问题怎么回答呢,太泛泛了啊。
那我就说几句吧,hashSet是Set接口的实现类,底层数据是哈希值结构,由于存入hashSet集合的元素在存入的时候都会默认调用hashCode和equals方法,所以存入hashSet集合的元素(对象)都要覆写hashcode和equals方法,这有这样在存入的时候才能调到这些方法,不至于抛出异常。
作者:
郭利超
时间:
2013-3-19 20:03
HashSet是实现Set接口的一个类,具有以下的特点:
Ø 不能保证元素的排列顺序,顺序有可能发生变化。
Ø 另外HashSet不是同步的,如果多个线程同时访问一个Set,只要有一个线程修改Set中的值,就必须进行同步处理,通常通过同步封装这个Set的对象来完成同步,如果不存在这样的对象,可以使用Collections.synchronizedSet()方法完成。
Set s = Collections.synchronizedSet(new HashSet(...));
Ø 元素值可以是null。
这里使用例子来介绍各个方法的用法。
package com.li.common;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSetTest test = new HashSetTest();
test.testHashSet();
}
public void testHashSet(){
//实例化HashSet对象
HashSet hs = new HashSet();
System.out.println("添加第一个元素");
hs.add(new String("第一个元素"));
System.out.println("创建一个ArrayList对象,添加两个元素");
ArrayList list = new ArrayList();
list.add("第二个元素");
list.add("第三个元素");
System.out.println("把ArrayList对象添加到HashSet中");
hs.addAll(list);
System.out.println("在HashSet中添加一个元素");
hs.add("第四个元素");
System.out.println("添加一个null元素");
hs.add(null);
System.out.println("/n通过转换成数组遍历的结果:");
System.out.println("HashSet中的数据如下:");
this.show2(hs);
System.out.println("/n通过得到Iterator遍历的结果:");
hs.remove("第一个元素");
System.out.println("删除/"第一个元素/"之后:");
this.show1(hs);
System.out.println("HashSet中元素的个数为:"+hs.size());
if(hs.isEmpty()){
System.out.println("HashSet是空的");
}
else{
System.out.println("HashSet不是空的");
}
System.out.println("清空所有的元素:");
hs.clear();
if(hs.isEmpty()){
System.out.println("HashSet是空的");
}
else{
System.out.println("HashSet不是空的");
}
}
/*
* 得到Iterator,然后遍历输出
*/
public void show1(HashSet hs){
Iterator i = hs.iterator();
while(i.hasNext()){
String temp = (String)i.next();
System.out.println(temp);
}
}
/*
* 转换成数组,遍历并输出HashSet中的元素
*/
public void show2(HashSet hs){
Object o[] = hs.toArray();
for(int i=0;i<o.length;i++){
System.out.println((String)o[i]);
}
}
}
Java中的集合(Collection)有两类,一类是List,再有一类是Set。你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。
1、如果两个对象相同,那么它们的hashCode值一定要相同;
2、如果两个对象的hashCode相同,它们并不一定相同
作者:
郝强勇
时间:
2013-3-19 20:04
楼主啊,能问点具体的吗,我也是菜鸟啊,所以这么广泛的问题不太好回答啊,呵呵。
作者:
⋛⋌⋚JEEP
时间:
2014-7-15 23:49
楼上很详细,巩固一下基础:)
作者:
a191170796
时间:
2014-7-16 11:30
跟着楼上,我又来了!!!
作者:
18204509116
时间:
2015-9-21 23:27
支持黑马 黑马加油
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2