Set:无序、不可以重复元素
|-- HashSet : 数据底层结构是哈希表。线程是非同步的。
保证元素唯一性的原理:判断元素的hashcode的值是否相同
如果相同,还会继续判断元素的equals方法,是否为true。
|-- TreeSet:可以对Set集合中的元素进行排序。
底层数据结构是二叉树、 保证元素唯一性的依据: compareTo方法return(); comparable 里面是 compareTo方法。
TreeSet排序的第一种方式:让元素自身具备比较性,元素需要实现comparable接口,覆盖compareTo方法。这种方式也称为元素的自然排序,或者叫默认排序。
TreeSet排序的第二种方式:当元素自身不具备比较性,或者具备的比较性不是所需要的。 这时需要让集合自身具备比较性。定义比较器。 两种都存在,以比较器为主。
定义一个类, 实现comparator,覆盖 compare方法。 进行自定义比较。
import java.util.*; public class Practice_1 { public static void main(String[] args) { // TODO Auto-generated method stub TreeSet<Object> ts = new TreeSet<Object>(new MyCompare()); ts.add("abcd"); ts.add("cg"); ts.add("stfff"); ts.add("sbbbb"); ts.add("abdwqeqw"); Iterator it = ts.iterator(); while(it.hasNext()) { sop(it.next()); } } public static void sop(Object obj) { System.out.println(obj); } } class MyCompare implements Comparator //示例 ! { public int compare(Object o1, Object o2) { String s1 = (String)o1; String s2 = (String)o2; int num = new Integer(s1.length()).compareTo(new Integer(s2.length())); if( num ==0 ) { return s1.compareTo(s2); } return num; } }