HashSet ,作为Set集合的一个实现类,很多书中写到Set中不能存放重复的元素。事实上并非如此。看下面的一个简短的例子
import java.util.*;
class AddObject {
int hashCode;
public AddObject(int hashCode) {
this.hashCode = hashCode;
}
public int hashCode() {
return hashCode;
}
}
public class TestHashSet {
public static void main(String args[]) {
// set在存储数据时需要遍历之前所存放的数据(hashCode与内存地址),用于与当前所要添加的元素进行对比。若得出结果相等,
// 则不添加。比较的方法是:首先比较两个对象的hashCode,如果不相等,则直接添加;否则,再用equals()(比较地址)
// 方法进行比较,如果结果返回为true,则不添加;否则,添加
Set<AddObject> set = new HashSet<AddObject>();
// 设置初始hashCode值
AddObject ao = new AddObject(2);
// 第一次添加
set.add(ao);
// 重新设置hashCode
ao.hashCode = 3;
// 再次添加
set.add(ao);
System.out.println(set.size());
// 输出结果显然是2。但两次添加的对象显然是同一个对象,所以Set中不能存放重复的元素这一说法是不完善的
}
}
TreeSet:一个有序的Set(一般为升序)·,它是通过compareTo()这个函数来判断所添加的数据是否已经存在和排序
import java.util.*;
class A implements Comparable {
public int compareTo(Object o) {
// 返回值为0时,表示两个对象相等不可以添加;否则添加成功
return 1;
}
}
public class TestTreeSet {
public static void main(String[] args) {
TreeSet<A> ts = new TreeSet<A>();
A a = new A();
A b = new A();
// 进行添加时,调用compareTo()方法进行比较。一来判断是否重复;二来,是为了排序
ts.add(a);
ts.add(b);
System.out.println(ts.size());
}
}
分享到:
相关推荐
在Java编程语言中,集合框架是处理数据的重要组成部分,其中`HashSet`和`TreeSet`是两种常用的Set接口实现类。它们各自具有独特的特性和用途,理解它们的区别对于编写高效且正确的代码至关重要。 首先,`HashSet`是...
HashSet和TreeSet是Java集合框架中的两种重要数据结构,它们都是Set接口的实现类,用于存储不重复的元素。在编程实践中,理解它们的区别和应用场景至关重要。 HashSet是基于HashMap实现的,它不保证元素的顺序,...
HashSet 和 TreeSet 是 Java 中两种常用的 Set 集合实现,它们都继承自 Set 接口,但实现方式和特性上存在显著差异。 首先,HashSet 是基于哈希表(HashMap 实例)来存储元素的,因此它提供了快速的插入、删除和...
HashSet和TreeSet使用方法的区别解析 HashSet和TreeSet都是Java集合框架中的Set接口实现,用于存储不重复的元素。但是,它们在使用方法和实现机理上有很大的区别。 首先,从使用方法上讲,HashSet和TreeSet都可以...
本文主要探讨了三种基于Set接口的实现类:HashSet、LinkedHashSet和TreeSet,它们各自有不同的特性和使用场景。 首先,HashSet是最基础的Set实现,它不保证元素的特定顺序,也不保证在多次操作后保持元素的顺序不变...
Java HashSet 和 TreeSet 的区别详解 HashSet 和 TreeSet 是 Java 中两个常用的集合类,它们都实现了 Set 接口,但它们之间有很大的区别。本文将详细介绍 HashSet 和 TreeSet 的区别,帮助大家更好地理解和使用这些...
在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中`TreeMap`、`TreeSet`、`HashSet`以及`HashMap`是最常用的数据结构之一。这些集合类各自有着独特的特性和应用场景,下面将对它们进行详细介绍。...
在Java编程中,HashMap、HashSet、TreeMap和TreeSet是四种常见的集合类,它们各自有特定的用途和内部实现机制。这些数据结构用于存储和管理数据,其中HashMap和HashSet是基于哈希表实现的,而TreeMap和TreeSet则是...
在Java编程语言中,集合框架是处理对象组的重要工具,其中`HashSet`和`TreeSet`是两种常见的接口实现类,分别提供了不同的功能和性能特性。本教程将深入探讨这两个集合类以及它们与比较器(Comparator)的关系。 ...
Set集合在Java编程中扮演着重要的角色,它是一种不允许元素重复的...在处理自定义对象时,确保正确地重写`equals()`和`hashCode()`方法至关重要,因为这是判断对象是否相等的标准,特别是在使用HashSet和TreeSet时。
### HashMap与HashTable和HashSet的区别 #### 一、概述 在Java集合框架中,`HashMap`, `HashTable` 和 `HashSet` 是三个重要的数据结构,它们分别实现了`Map`接口和`Set`接口,提供了不同的功能来满足不同的编程...
比较遗憾的是,TreeSet 虽然实现起来也比较简单,但它有着和 HashSet 一样的问题,会自动排序 5:LinkedHashSet去重(有序) 从代码和执行结果可以看出,LinkedHashSet 是到目前为止,实现比较简单,且最终生成的新...
`TreeSet`在许多场景下比其他集合如`ArrayList`或`HashSet`更有优势,因为它的元素总是按特定顺序排列,并且支持高效的查找、插入和删除操作。 首先,`TreeSet`的特性包括: 1. **有序性**:`TreeSet`中的元素会...
3. 带有初始容量和加载因子参数的构造函数:这种构造函数允许用户指定一个初始容量和加载因子来创建HashSet实例。这在存储大量元素时特别有用,因为它可以减少HashMap的扩容次数,从而提高性能。 4. 只带有一个初始...
- **指定初始容量和加载因子的构造函数**:`HashSet(int initialCapacity, float loadFactor)` 设置初始容量和加载因子,用于控制HashMap何时进行扩容。 ### HashSet的主要API - `add(E object)`:将指定的元素添加...
在实际应用中,HashSet因其存储元素的唯一性和对元素添加、删除、查询的高效性而广泛应用。然而,需要注意的是,由于HashSet的无序性,元素插入顺序并不会被保留。如果需要一个有序集合,可以考虑使用LinkedHashSet...
本例中,我们探讨了两种实现`Set`接口的类:`HashSet`和`TreeSet`,以及如何使用它们的一些基本操作。 首先,我们看`HashSet`的使用。`HashSet`是一个不保证元素顺序的集合,它根据元素的`hashCode`值来存储和检索...
java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。
自己写的例子,关于HashSet遍历和HashMap遍历的. 感谢大家参考