Set集合
List集合的特点:元素有序,(元素存取顺序一致)元素可以重复
Set集合的特点:元素无序,(元素存取顺序不一致) 元素不重复
HashSet:
底层数据结构时哈希表,元素无序,且唯一,唯一是要靠元素重写hashCode()方法和equals()方法来实现,如果不重写这两种方法,则无法保证元素唯一。Integer和String默认重写了这两种方法。
线程不安全,效率高,允许存储null元素。
LinkedHashSet:
底层数据结构是链表和哈希表,元素有序且唯一,链表保证元素有序,哈希表保证元素唯一
线程不安全,效率高。
TreeSet:
底层数据结构是二叉树,元素唯一且能对元素进行排序,排序分为自然排序和比较器排序,如果用空参构造就是自然排序,如果是有参构造就是比较器排序。
自然排序:元素必须实现Compareble接口并且重写compareTO()方法 ,元素排序就是根据compareTO()方法,的返回值的正负来决定排列顺序,返回0 元素不往里面存。
比较器排序:Comparator 比较器 是一个接口 接口中有一个比较的方法 compare()根据此方法的返回值的正负以及0 来决定元素的排列顺序
A:匿名内部类:
TreeSet<Student> students = new TreeSet<>(new Comparator<Student>() { @Override public int compare(Student s1, Student s2) {
//根据条件来排序 int r = s1.getAge() - s2.getAge(); int r2 = r == 0 ? s1.getName().compareTo(s2.getName()) : r; return -r2; } });
B:创建接口子实现类:
public class MyCompareTor implements Comparator<Student> {
@Override
public int compare(Student s1, Student s2) {
//根据条件来排序
int r = s1.getName().length() - s2.getName().length();
int r2 = r == 0 ? s1.getAge() - s2.getAge() : r;
int r3 = r2 == 0 ? s1.getName().compareTo(s2.getName()) : r2;
return r3;
}
}
MyCompareTor myCompareTor = new MyCompareTor();
TreeSet<Student> students = new TreeSet<>(myCompareTor);