为何Hashset、TreeSet、LinkedHashSet内部元素的排序结果不一样?

ouhz_rM 2017-06-10 12:36:33
package demo;

import java.util.LinkedHashSet;
import java.util.Set;

import org.junit.Test;

public class union_List {

@Test
public void test1() {
Set<Integer> s = new LinkedHashSet<>();// HashSet,TreeSet
int[] a = { 10, 11, 12, 13, 14, 15, 16 };
for_each(a, s);
int[] b = { 20, 12, 16, 17, 18, 19 };
for_each(b, s);
System.out.println(s);

}

// 把数组中所有的元素添加到set集合中
public void for_each(int[] a, Set<Integer> s) {
for (int i : a)
s.add(i);
}
}
...全文
313 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nikyotensai 2017-06-12
  • 打赏
  • 举报
回复
引用 2 楼 PrettyTutu 的回复:
Set接口继承了Collection接口。Set集合中不能包含重复的元素,每个元素必须是唯一的。 HashSet是采用hash表来实现的。其中的元素没有按顺序排列,偏速度型(快速存取) TreeSet是采用树结构实现(红黑树算法)。元素是按顺序进行排列,它还提供了一些方法来处理排序的set,如first(), last(), headSet(), tailSet()等等。偏排序 LinkedHashSet介于HashSet和TreeSet之间。它也是一个hash表,但是同时维护了一个双链表来记录插入的顺序。保持插入顺序 http://www.cnblogs.com/Terry-greener/archive/2011/12/02/2271707.html,这个人写的不错 应该能解决你的疑惑
厉害厉害
bin0166 2017-06-12
  • 打赏
  • 举报
回复
我也是新人,不太懂,看编程思想里面有说,运行效率方面吧,看一遍也记不住,有个概念,以后再摸索
qq_39009232 2017-06-10
  • 打赏
  • 举报
回复
这问题问的,底层就是这样实现的啊,何必钻牛角尖
PrettyTutu 2017-06-10
  • 打赏
  • 举报
回复
Set接口继承了Collection接口。Set集合中不能包含重复的元素,每个元素必须是唯一的。 HashSet是采用hash表来实现的。其中的元素没有按顺序排列,偏速度型(快速存取) TreeSet是采用树结构实现(红黑树算法)。元素是按顺序进行排列,它还提供了一些方法来处理排序的set,如first(), last(), headSet(), tailSet()等等。偏排序 LinkedHashSet介于HashSet和TreeSet之间。它也是一个hash表,但是同时维护了一个双链表来记录插入的顺序。保持插入顺序 http://www.cnblogs.com/Terry-greener/archive/2011/12/02/2271707.html,这个人写的不错 应该能解决你的疑惑
HinanaiTenshi 2017-06-10
  • 打赏
  • 举报
回复
你并没有排序啊,只是把数据存储起来了而已。 至于内部结构,因为不同的实现会有细节的差别,如果是有序实现那你排序的结果一定是一致的。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧