HashSet是实现Set接口的一个类,具有以下的特点:
Ø 不能保证元素的排列顺序,顺序有可能发生变化。
Ø 另外HashSet不是同步的,如果多个线程同时访问一个Set,只要有一个线程修改Set中的值,就必须进行同步处理,通常通过同步封装这个Set的对象来完成同步,如果不存在这样的对象,可以使用Collections.synchronizedSet()方法完成。
Set s = Collections.synchronizedSet(new HashSet(...));
Ø 元素值可以是null。
方法不是很多,在前面介绍Set接口的时候方法基本上都涉及到,这里使用例子来介绍各个方法的用法。
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]);
}
}
}
分享到:
相关推荐
可以使用`addAll()`方法从另一个集合(例如`ArrayList`)中添加元素到`HashSet`中。 ```java ArrayList<String> list = new ArrayList(); list.add("第二个元素"); list.add("第三个元素"); hs.addAll(list);...
上面的示例程序创建了一个HashSet对象,并通过add方法添加了几个字符串元素。然后使用contains方法检查HashSet中是否包含特定字符串。我们还演示了remove方法来删除一个元素,使用size方法获取了HashSet中元素的数量...
在本文中,我们将通过一个实例,介绍如何使用Java HashSet集合来存储和遍历学生对象,并解决添加重复元素的问题。 知识点1: HashSet集合的特点 HashSet集合是一种基于哈希表的集合实现,它的特点是: * 不存储...
HashSet类提供了添加元素(add())、删除元素(remove())、检查元素是否存在(contains())等方法。在删除学生这个场景中,我们通常会有一个表示学生的类,例如`Student`,它包含一些属性如学号(id)、姓名(name...
HashSet通过调用HashMap的方法来完成添加、删除、查找等操作。HashMap提供了快速定位元素的能力,使得HashSet具有高效的查找性能。 ### 源码解析(基于JDK 1.6.0_45) 在JDK 1.6版本的HashSet源码中,可以看到一个...
HashSet 是 Java 中的一个集合类,它实现了 Set 接口并提供了...非线程安全:HashSet 类本身不是线程安全的,在多线程环境下需要进行外部同步操作,或者使用 Collections.synchronizedSet 方法封装成线程安全的集合。
理解其内部机制和使用方法,对于编写高效的Java代码至关重要。在黑马程序员_毕向东_Java基础视频教程中,你可能会更详细地学习到关于HashSet的实现原理和实战技巧。通过观看相关视频和实践操作,可以加深对HashSet的...
你可以通过调用`iterator()`方法获取迭代器,然后使用`hasNext()`和`next()`方法遍历集合的所有元素。例如: ```java ArrayList<String> list = new ArrayList(); // 添加元素... Iterator<String> it = list....
在C#编程语言中,哈希表(Hashtable)是一种常用的数据结构,它提供...在实际应用中,可能还需要考虑到异常处理、性能优化等其他因素,但基本的遍历方法如上所述。熟练掌握这些技巧,能够使你在C#编程中更加游刃有余。
Set接口继承了Collection接口,提供了与Collection相同的基本方法,如添加元素(add)、判断是否为空(isEmpty)、删除元素(remove)等。然而,Set接口的独特之处在于它确保了集合中的元素都是唯一的。Set接口不允许插入...
HashSet的遍历也是通过HashMap的`keySet()`方法实现的,它返回一个迭代器,可以遍历HashSet的所有元素。由于HashSet不保证元素的顺序,所以遍历顺序可能与添加顺序不同。 安全性方面,虽然HashSet本身没有提供线程...
由于排序的存在,TreeSet 的插入、删除和查找操作通常比 HashSet 稍慢,但是提供了有序的遍历能力。同样,TreeSet 也只允许存储唯一的元素,不允许有重复。与 HashSet 相比,TreeSet 的迭代顺序是可预测的,即按照...
在Java中,我们通常会使用`Iterator`来安全地遍历并修改集合,因为`Iterator`提供了`remove()`方法来删除当前迭代的元素。但如果你在不使用`Iterator`的情况下直接调用集合的`remove()`或其他修改方法,就会触发异常...
### Java集合类的基本用法 Java集合框架是Java标准库的一部分,它提供了强大的容器对象来存储和操作数据。集合框架主要包括两种类型的容器:列表(List)和集合(Set)。此外,还包括映射(Map),用于存储键值对。...
1. **哈希函数**:当向HashSet中添加一个元素时,首先会调用该元素所属类的`hashCode()`方法生成哈希码。一个好的哈希函数应该尽可能地将不同元素映射到不同的哈希码,以减少哈希冲突。如果两个对象的哈希码相同,...
因此,HashSet的所有操作,如添加、删除、查找等,都会转化为HashMap的操作。 哈希存储机制的关键在于哈希函数的设计,一个良好的哈希函数应能尽可能地将不同元素均匀分布到桶(内部数组的索引)中,减少冲突。在...
集合类的主要接口包括Collection、List、Set和Map,这些接口定义了各种操作集合对象的方法,比如添加、删除、修改和遍历元素。在Java API中,不同的集合类根据其特性实现了这些接口,为开发者提供了多样化的选择。 ...
最后,我们用HashMap展示了Map的基本用法,添加键值对,遍历并打印键值对,删除指定键的元素,再次检查集合大小。 思考题中,我们讨论了List、Set和Map的区别,以及为什么优先选择集合框架而非数组。集合框架提供了...
以下是一些基本的HashSet用法: 1. **创建HashSet**:你可以通过无参构造函数或传入初始集合来创建HashSet。 ```java Set<String> set = new HashSet(); Set<String> set = new HashSet(Arrays.asList("Element1...
- 使用适当的数据结构(如HashSet、LinkedList等)来存储子节点,以优化插入和删除速度。 总之,理解并掌握C#中树的使用,不仅有助于编写高效的数据结构算法,还能在各种应用场景中发挥重要作用,如文件系统、...