hashSet linkedHashSet treeSet 一点区别

上代码先:

	  Set<String> hashSet=new HashSet<String>();
	  hashSet.add("thireBottom");
	  hashSet.add("thirdTop");
	  System.out.println(hashSet);

	  Set<String> linkedSet=new LinkedHashSet<String>();
	  linkedSet.add("thireBottom");
	  linkedSet.add("thirdTop");
	  System.out.println(linkedSet);

	  Set<String> treeSet=new TreeSet<String>();
	  treeSet.add("thirdTop");
	  treeSet.add("thireBottom");
	  System.out.println(treeSet);

结果如下:

[thirdTop, thirdBottom]

[thirdBottom, thirdTop]

[thirdBottom, thirdTop]

工作了许久有时候也没注意到这些细节上的东西,今天刚好碰到一个需求就是要求Set集合按照一定的顺序输出,翻了下hashSet的源码,简单mark下.

对于hashSet这个集合,本质是基于hashMap的ketSet()实现的.  keySet()类似一个数组集合, 当往里面add数据的时候, 会先计算该数据的hashCode值, 根据该值存入到数组集合中.例子中: thirdTop 的hashCode值对应的数组下标排在thirdBottom前面,所以输出 thirdTop, thirdBottom

结论: hashSet 中的数据排序和你插入顺序无关, 也没有指定的排序方法供你选择, 结果可以简单理解为不可预知的(其实还是根据hashCode来的)

linkedHashSet 数据插入不是基于数组,而是以链式存储,通过前后指针相互关联.所以数据插入顺序决定了输出顺序

treeSet <E> 相比上面则提供了,排序的方法。 插入的对象必须实现 comparable接口以提供排序方法, 如果是字符串默认就是按照字母顺序排序。

时间: 2024-08-23 02:49:18

hashSet linkedHashSet treeSet 一点区别的相关文章

hashset和treeset的区别

hashset 和 treeset的区别 hashset 和 treeset的区别 1.TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值. 2.HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束. 3.HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashcod

安卓 ArrayList,LinkedList,HashSet,Vector,TreeSet的区别和使用

java的集合就那么几种 总体为:List,Set,Map (都是接口由其子类去实现具体的方法) ArrayList,LinkedList,Vector都属于List List:元素是有顺序的,元素可以重复因为每个元素有自己的角标(索引)  |-- ArrayList:底层的数据结构是数组结构,特点是:查询很快,增 删 稍微慢点,线程不同步 |-- LinkedList:底层使用的是链表数据结构,特点是:增 删很快,查询慢. |--Vector:底层是数组数据结构,线程同步,被ArrayList

linkedhashSet和hashSet和TreeSet的区别(转)

Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用equals方法比较返回true,Set就不 会接受这两个对象. HashSetHashSet有以下特点? 不能保证元素的排列顺序,顺序有可能发生变化? 不是同步的? 集合元素可以是null,但只能放入一个null当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方

集合类源码(八)Collection之Set(HashSet, LinkedHashSet, TreeSet)

HashSet 先看一下成员变量 // 由此可见内部存储是一个HashMap private transient HashMap<E,Object> map; private static final Object PRESENT = new Object(); public HashSet() { map = new HashMap<>(); } add方法 public boolean add(E e) { return map.put(e, PRESENT)==null; }

Java——HashSet和TreeSet的区别

HashSetHashSet有以下特点? 不能保证元素的排列顺序,顺序有可能发生变化? 不是同步的? 集合元素可以是null,但只能放入一个null当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置.简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相 等注意,如果要把一个

Java集合 -- HashSet 与TreeSet和LinkedHashSet的区别

原文:https://www.cnblogs.com/wl0000-03/p/6019627.html Set接口  Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false. Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用equals方法比较返回true,Set就不会接受这两个对象. HashSet与TreeSet都是基于Set接口的实现类.其中TreeSet是Set的子接口SortedSet的实现类.Set接口

【Java_集合框架Set】HashSet、LinkedHashSet、TreeSet使用区别

HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放: LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代: TreeSet:提供一个使用树结构存储Set接口的实现,对象以升序顺序存储,访问和遍历的时间很快. 示例代码:: 1 package com.test2; 2 3 import java.util.HashSet; 4 import java.util.Iterator; 5 import java.uti

Java集合详解7:HashSet,TreeSet与LinkedHashSet

Java集合详解7:HashSet,TreeSet与LinkedHashSet 今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之前文章的三个map进行实现的,所以推荐大家先看一下前面有关map的文章,结合使用味道更佳. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 文章首发于我的个人博客: https://h2pl.github.io/2018/05/12/colle

HashSet vs. TreeSet vs. LinkedHashSet

A Set contains no duplicate elements. That is one of the major reasons to use a set. There are 3 commonly used implementations of Set: HashSet, TreeSet and LinkedHashSet. When and which to use is an important question. In brief, if you need a fast se