一.Set接口的概述
Set:是无序的(存储和取出不一致),集合中的元素不可以重复 Set的子实现类:HashSet,LinkedHashSet,TreeSet
public class Demo1 {
public static void main (String[] args) {
Set<String> s = new HashSet<String> ();
s.add("hello" );
s.add("world" );
s.add("java" );
s.add("!" );
for (String a : s){
System.out .println(a);
}
}
}
结果:
!
world
java
hello
二.HashSet
hashSet:不保证 set 的迭代顺序,特别是不保证该顺序恒久不变
三.LinkedHashed
LinkedHashSet:底层数据结构是由哈希表和链表实现 与hashSet(无序性)区别 : 哈希表:保证元素的唯一性 链表:元素的存储和取出一致(有序性)
四.TreeSet
TreeSet集合底层依赖于TreeMap集合,底层数据结构是红黑树结构(一种自平衡的数结构) TreeSet集合保证元素的唯一性(TreeMap的红黑树结构),并且还能排序(自然排序和选择排序) TreeSet集合用来存储自定义的对象 使用自然排序:一定要实现Compareable接口(底层要依赖于:compareTo:用此对象与指定对象进行比较) TreeSet集合默认使用元素的自然顺序对元素进行排序,若当前没有实现Compareable接口进行自然排序,则会出现java.lang.Comparable
类转换异常 比较器排序(Copartor) 自然排序 :
public class Student implements Comparable<Student>{
private String name;
private int age ;
public Student () {
super();
}
public Student (String name, int age) {
this .name = name;
this .age = age;
}
public String getName () {
return name;
}
public void setName (String name) {
this .name = name;
}
public int getAge () {
return age;
}
public void setAge (int age) {
this .age = age;
}
@Override
public int compareTo (Student s) {
int num = this .age - s.age;
int num2 = num==0 ? this .name.compareTo(s.name) : num ;
return num2 ;
}
}
import java.util.TreeSet;
public class Demo2 {
public static void main (String[] args) {
TreeSet<Student> ts = new TreeSet<Student>() ;
Student s1 = new Student("zhangguorong" , 38 ) ;
Student s2 = new Student("gaoyuanyuan" , 27 ) ;
Student s3 = new Student("wanglihong" , 29 ) ;
Student s4 = new Student("liushishi" , 28 ) ;
Student s5 = new Student("gaoyuanyuan" , 27 ) ;
Student s6 = new Student("zhangsan" , 27 ) ;
Student s7 = new Student("linqingxia" , 49 ) ;
Student s8 = new Student("wuqilong" , 38 ) ;
ts.add(s1) ;
ts.add(s2) ;
ts.add(s3) ;
ts.add(s4) ;
ts.add(s5) ;
ts.add(s6) ;
ts.add(s7) ;
ts.add(s8) ;
for (Student s : ts){
System.out .println(s.getName()+"---" +s.getAge());
}
}
}
结果:
gaoyuanyuan---27
zhangsan---27
liushishi---28
wanglihong---29
wuqilong---38
zhangguorong---38
linqingxia---49