Set集合中不包含重复对象。
HashSet:
HashSet的底层用哈希散列表来存储对象。其中的散列码是由关键字的信息内容确定的。关键字到散列码的转换是自动执行的。
存储元素时底层要做的判断:1.调用元素的hashCode()方法,直接访问对应的数组元素,有没有这个哈希值,没有就直接存储.2.数组中已经有哈希值相同的,那么就调用元素的equals()方法,和哈希值相同的元素进行一一比较3.equals()方法比较,有相等的就不存储,不相等就存储
所以可见HashSet是不按特定顺序存放的。并不能确定集合的排列顺序。
它的优点是,即使对于大的集合,也能使一些基本操作运行的时间保持不变。
package list.test;
import java.util.HashSet;public class Test4 {public static void main(String args[]) {// 创建HashSet 对象HashSet hs = new HashSet();// 加入元素到HashSet 中hs.add("B");hs.add("A");hs.add("D");hs.add("E");hs.add("C");hs.add("F");System.out.println(hs);}
}
//[A, B, C, D, E, F]
TreeSet:TreeSet是实现Set接口的实现类。所以它存储的值是唯一的,同时也可以对存储的值进行排序,排序用的是二叉树原理。
根据其元素的自然顺序按升序排序。
package list.test;
import java.util.TreeSet;
public class Test5 {public static void main(String args[]) {// 创建TreeSet 对象TreeSet ts = new TreeSet();// 加入元素到TreeSet 中ts.add("B");ts.add("A");ts.add("C");ts.add("E");ts.add("F");ts.add("D");System.out.println(ts);}
}
//[A, B, C, D, E, F]