Set不会按着顺序来排序而是按着录入的顺序排序并且不可以录入相同的数据
HashSet
- HashSet是Set的典型实现,HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。其特点:不能保证元素的排列顺序;不是同步的,不是线程安全;集合值可以是null。
public void test04() {
Set<String> set = new HashSet<>();
for (int i = 0; i < 5; i++) {
set.add("wzl" + (i + 1));
}
System.out.println(set);
for (String name : set) {
System.out.println(name);
}
}
//这条数据的顺序不是按着数字顺序来排序的 而是按着for循环录入的顺序来排的
LinkedHashSet类
- LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
public void test02() {
Set set = new LinkedHashSet();
byte a = 1;
short b = 2;
int c = 3;
long d = 4L;
double e = 5.0d;
float f = 6.0f;
char g = 'a';
boolean h = false;
set.add(a);
set.add(b);
set.add(c);
set.add(d);
set.add(e);
set.add(f);
set.add(g);
set.add(h);
set.add(a);
System.out.println(set);
}
TreeSet类
-
TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。
TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0。向TreeSet中添加的应该是同一个类的对象,且最好是不可变对象。
public void test(){ Set<Book> books = new TreeSet<>(); books.add(new Book("浮城谜事", "娄烨", 35, 150)); books.add(new Book("邪不压正", "姜文", 35, 150)); books.add(new Book("推拿", "娄烨", 33, 150)); books.add(new Book("让子弹飞", "姜文", 33, 150)); books.add(new Book("颐和园", "娄烨", 35, 180)); books.add(new Book("一步之遥", "姜文", 35, 180)); Iterator<Book> it = books.iterator(); while (it.hasNext()){ Book book = it.next(); System.out.println(book); } }