无序的有重复数据的list变成有序的无重复数据的list
将会遇到的问题:
1、set是不重复的,但是new出来的数据是否能保证不重复?
2、hashset为什么会自动排序呢?
说明:list是有序的(是指的保留其初始化的顺序),不代表初始化是有序的
示例:
1、 首先创建一个无序有重复数据的list
list内容打印出来为:1 5 8 9 2 4 6 5 7 3 3 3 1 1,
说明:其中最后两个1是new出来的
2、 将list转化为set,
a、list的顺序消失
b、list的数据缺损,剔除重复的数据
c、set有三种方式:hashset无序;treeset自动按照从小到大排序,不保留list的顺序;linkedhashset会保留list的顺序
set内容打印出来为:
Set set = new HashSet();
set.addAll(list);
HashSet打印内容为:[1, 2, 3, 4, 5, 6, 7, 8, 9]
TreeSet打印内容为:[1, 2, 3, 4, 5, 6, 7, 8, 9]//正序
LinkedHashSet打印内容为:[1, 5, 8, 9, 2, 4, 6, 7, 3]//保留list的顺序
set详解:在java语言中,提供多种不同的结构来组织对象,Set(集合)是其中的一种,本身是一个接口,其迭代时的顺序取决于其具体实现。
典型的实现包括:
HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放;
LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代;
TreeSet:提供一个使用树结构存储Set接口的实现,对象以升序顺序存储,访问和遍历的时间很快。
3、 将set转化为list
注:需先清空list,不然下次把set元素加入此list的时候是在原来的基础上追加元素的解决问题:
1、set是不重复的,但是new出来的数据是否能保证不重复
a)用整数Integer尝试,set可以将重复数据剔除,即使是new出来的数据也能保证不重复
b)用字符串去尝试:set可以将重复数据剔除,即使是new出来的数据也能保证不重复
2、hashset自动排序的表象:
这样并不是按照Set内容进行排序的,他们的顺序取决于hashCode,只是Integer的hashCode刚刚好用的是Integer的value,结果看起来就过排序了。如果是其他hashCode计算方式就不一定了。