众所周知,java中Set里的数据不可重复,并且具有排序性,当我们在项目中遇到需要去重复并且排序的需求时难免想起Set。Set的实现类中HashSet和TreeSet在我们的工作中使用最为频繁,HashSet要首当其冲,但是它并非万能的哦,同样是既要去重又要排序,但两者的区别就体现出来了。咱们看代码先:
public static void main(String[] args) {
Set<CnfmSelectItem> hashSet = new HashSet<CnfmSelectItem>();
CnfmSelectItem item = new CnfmSelectItem("(GP) Other Forecasted Item - CDM / DLN / RDLN");
CnfmSelectItem item1 = new CnfmSelectItem("(GP) Other Forecasted Item - Freight");
CnfmSelectItem item2 = new CnfmSelectItem("(GP) Other Forecasted Item - LES: Magic");
CnfmSelectItem item3 = new CnfmSelectItem("(GP) Other Forecasted Item - Resident TA");
CnfmSelectItem item4 = new CnfmSelectItem("(GP) Other Forecasted Item - TIL");
CnfmSelectItem item5 = new CnfmSelectItem("(GP) Other Forecasted Item - CDM / DLN / RDLN");
CnfmSelectItem item6 = new CnfmSelectItem("(GP) Other Forecasted Item - Resident TA");
hashSet.add(item);
hashSet.add(item1);
hashSet.add(item2);
hashSet.add(item3);
hashSet.add(item4);
hashSet.add(item5);
hashSet.add(item6);
System.out.println("***************This result using the HashSet collection.**************************\n");
for (CnfmSelectItem cnfmSelectItem : hashSet) {
System.out.println(cnfmSelectItem.getValue());
}
System.out.println("\n***************This result using the TreeSet collection.**************************\n");
Set<CnfmSelectItem> treeSet = new TreeSet<CnfmSelectItem>();
treeSet.addAll(hashSet);
for (CnfmSelectItem cnfmSelectItem : treeSet) {
System.out.println(cnfmSelectItem.getValue());
}
}
CnfmSelectItem是javax.faces.model.SelectItem的封装类,在jsf框架中使用比较广泛,这里就不多说了。
***************This result using the HashSet collection.**************************
(GP) Other Forecasted Item - LES: Magic
(GP) Other Forecasted Item - Resident TA
(GP) Other Forecasted Item - CDM / DLN / RDLN
(GP) Other Forecasted Item - TIL
(GP) Other Forecasted Item - Freight
***************This result using the TreeSet collection.**************************
(GP) Other Forecasted Item - CDM / DLN / RDLN
(GP) Other Forecasted Item - Freight
(GP) Other Forecasted Item - LES: Magic
(GP) Other Forecasted Item - Resident TA
(GP) Other Forecasted Item - TIL
从运行结果中不难看出HashSet和TreeSet的区别,也发现TreeSet在排序时更给力。
下列总结来自互联网:
HashSet
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
此类为基本操作提供了稳定性能,这些基本操作包括 add、remove、contains 和 size,假定哈希函数将这些元素正确地分布在桶中。对此集合进行迭代所需的时间与 HashSet 实例的大小(元素的数量)和底层 HashMap 实例(桶的数量)的“容量”的和成比例。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。
我们应该为要存放到散列表的各个对象定义hashCode()和equals();
TreeSet
此类实现 Set 接口,该接口由 TreeMap 实例支持。此类保证排序后的 set 按照升序排列元素,根据使用的构造方法不同,可能会按照元素的自然顺序 进行排序,或按照在创建 set 时所提供的比较器进行排序。
是一个有序集合,元素中安升序排序,缺省是按照自然顺序进行排序,意味着TreeSet中元素要实现Comparable接口;
我们可以构造TreeSet对象时,传递实现了Comparator接口的比较器对象.
相信大家对HashSet和TreeSet有了更深层的了解,工作中也能更好的使用它们啦。
分享到:
相关推荐
总结一下,HashSet和TreeSet的主要区别在于: 1. 存储结构:HashSet使用哈希表,TreeSet使用红黑树。 2. 顺序:HashSet无特定顺序,TreeSet保持排序。 3. 插入、删除和查找效率:HashSet平均O(1),最坏O(n);TreeSet...
Java HashSet 和 TreeSet 的区别详解 HashSet 和 TreeSet 是 Java 中两个常用的集合类,它们都实现了 Set 接口,但它们之间有很大的区别。本文将详细介绍 HashSet 和 TreeSet 的区别,帮助大家更好地理解和使用这些...
由于排序的存在,TreeSet 的插入、删除和查找操作通常比 HashSet 稍慢,但是提供了有序的遍历能力。同样,TreeSet 也只允许存储唯一的元素,不允许有重复。与 HashSet 相比,TreeSet 的迭代顺序是可预测的,即按照...
HashSet和TreeSet使用方法的区别解析 HashSet和TreeSet都是Java集合框架中的Set接口实现,用于存储不重复的元素。但是,它们在使用方法和实现机理上有很大的区别。 首先,从使用方法上讲,HashSet和TreeSet都可以...
本文主要探讨了三种基于Set接口的实现类:HashSet、LinkedHashSet和TreeSet,它们各自有不同的特性和使用场景。 首先,HashSet是最基础的Set实现,它不保证元素的特定顺序,也不保证在多次操作后保持元素的顺序不变...
`HashSet`基于哈希表,提供了快速的插入、删除和查找,而`TreeSet`则保证元素的排序,适用于需要排序的场景。`Comparator`接口则允许我们自定义排序规则,增强了集合的灵活性。理解并熟练运用这些概念和工具,对于...
在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中`TreeMap`、`TreeSet`、`HashSet`以及`HashMap`是最常用的数据结构之一。这些集合类各自有着独特的特性和应用场景,下面将对它们进行详细介绍。...
比较遗憾的是,TreeSet 虽然实现起来也比较简单,但它有着和 HashSet 一样的问题,会自动排序 5:LinkedHashSet去重(有序) 从代码和执行结果可以看出,LinkedHashSet 是到目前为止,实现比较简单,且最终生成的新...
java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。
### HashMap与HashTable和HashSet的区别 #### 一、概述 在Java集合框架中,`HashMap`, `HashTable` 和 `HashSet` 是三个重要的数据结构,它们分别实现了`Map`接口和`Set`接口,提供了不同的功能来满足不同的编程...
在Java编程中,HashMap、HashSet、TreeMap和TreeSet是四种常见的集合类,它们各自有特定的用途和内部实现机制。这些数据结构用于存储和管理数据,其中HashMap和HashSet是基于哈希表实现的,而TreeMap和TreeSet则是...
2. **Set**: 保证元素的唯一性,如HashSet和TreeSet。TreeSet基于红黑树实现,自动维护元素的排序。默认按照元素的自然顺序或自定义比较器进行排序。 3. **Map**: 存储键值对,如HashMap和TreeMap。HashMap使用哈希...
`TreeSet`在许多场景下比其他集合如`ArrayList`或`HashSet`更有优势,因为它的元素总是按特定顺序排列,并且支持高效的查找、插入和删除操作。 首先,`TreeSet`的特性包括: 1. **有序性**:`TreeSet`中的元素会...
Set接口(如HashSet、TreeSet)则确保元素唯一性,不保证顺序,适用于去重或存储不需排序的独特元素;而Map接口(如HashMap、TreeMap)用于存储键值对,键是唯一的,可以快速查找对应的值。 关于“HashSet保证数据...
总的来说,Java提供了多种方式对对象进行排序,包括ArrayList的`Collections.sort()`,HashSet的转换和排序,以及TreeSet的自然排序和Comparator排序。理解这些机制可以帮助我们更好地控制数据结构的排序行为,从而...
排序算法在 Java 中的应用...在需要快速地检索元素时,可以使用 HashSet 或 TreeSet 等数据结构。 在 Java 中,对列表进行排序的最快方法是使用 Collections.sort() 方法,并使用自定义的比较器来实现灵活的排序规则。
Set集合是JavaSE中的一种重要数据结构,主要包括HashSet、TreeSet和LinkedHashSet三个子类。下面我们将对Set集合的原理、特点、使用场景等进行详细的探索和分析。 HashSet HashSet是Set集合中的一种重要实现类,...
本资源聚焦于Java集合中的四个关键类:HashSet、TreeSet、HashMap和TreeMap,它们分别代表了不同类型的集合容器。 1. **HashSet**:HashSet是一个不允许重复元素的无序集合。它基于哈希表实现,插入和查找操作的...
HashSet以其高效性和无序性适合大部分需求,而TreeSet则在需要有序存储和快速查找、排序的场合表现出优势。了解和掌握这两种集合类的源码分析有助于深入理解Java集合框架的底层实现,从而更好地应用在实际开发中。