Set接口
Collection的另一个子接口为Set,Set集合现在所拥有的方法都是从Collection哪儿继承的,它本身并没有对其功能扩充。
Set接口存入元素的规则与List刚好相反,Set存入元素是无序的,且不会出现重复值
Set接口有两个实现类,分别是HashSet和TreeSet
实现类HashSet
HashSet是接口Set的一个实现类,它具有存储元素无序和不可重复的特点
HashSet存入元素的原理:调用对应对象的hashCode()方法来获取对象的哈希值,然后根据对应的哈希值来确定元素在集合中的存取位置,接下来再调用该对象的equals()方法来确定元素的存储不会出现重复的值。
HashSet具有良好的存取和查找性能。
HashSet集合的使用与遍历:
import java.util.HashSet; import java.util.Iterator; /* * 定义一个测试类 * */ public class Test { public static void main(String[] args) { //创建HashSet集合对象 HashSet set = new HashSet(); //向该集合中添加元素 set.add("jack"); set.add("baobao"); set.add("lucy"); set.add("小黑"); //添加重复元素 set.add("小黑"); //获取Iterator对象 Iterator it = set.iterator(); while(it.hasNext()){//通过while循环判断集合中是否还有元素 Object obj = it.next();//通过迭代器的next()方法获取元素 System.out.println(obj); } } }
输出结果:无序且不重复
一般情况下,在定义类需要存入HashSet集合的时候,都需要重写hashCode()方法,和equals方法,否则会因为方法无效判断而导致存入HashSet集合的数据出现重复
实现类TreeSet
TreeSet是Set接口的另外一个实现类,它通过自平衡的排序二叉树来存储元素,这样的方式存储方式能够把存进集合中的元素排序。
TreeSet集合存入集合的元素是不重复的,元素是有顺序的。
TreeSet实现与遍历:
import java.util.HashSet; import java.util.Iterator; import java.util.TreeSet; /* * 定义一个测试类 * */ public class Test { public static void main(String[] args) { //创建TreeSet集合对象 TreeSet set = new TreeSet(); //向该集合中添加元素 set.add("jack"); set.add("lucy"); set.add("helen"); //添加重复元素 set.add("helen"); //获取Iterator对象 Iterator it = set.iterator(); while(it.hasNext()){//通过while循环判断集合中是否还有元素 Object obj = it.next();//通过迭代器的next()方法获取元素 System.out.println(obj); } } }
返回结果:无重复值,有序
更多Set学习,可深挖推荐