1.Set:不允许有重复元素,和Collection的方法相同。使用equals()方法进行比较,如果返回true,两个对象的HashCode值也应该相等Set取出的方法只有一个:迭代器。
2.Set实现的类:
>LinkedHashSet:HashSet的子类,不允许重复的值,使用HashCode确定在集合中的位置,使用链表的方式确定位置(按照输入的顺序输出)。
>HashSet:底层数据结构是哈希表(散列表)。无序,可以存放空值,比数组查询的效率高,线性不同步。根据哈希冲突的特点,为了保证哈希表中元素的唯一性,该容器中存储的元素所属类应该复写Object中的hashCode,equals方法。如果重写了equals方法必须重写HashCode方法。
>TreeSet:底层数据结构是二叉树。线性不同步,可以对Set集合的元素按照指定规则进行排序。
(1)使用TreeSet无参构造器创建Set对象,向里面添加元素时必须使用Comparable接口的compareTo方法,来完成排序。
(2)创建TreeSet对象时,传入了一个实现Comparator接口的类,则使用TreeSet中的Comparator接口中的compare方法排序。
3. 实例:
LinkedList:
,可以存放空值,不允许出现重复值,使用HashCode确定在集合中的位置,使用链表的方式确定位置。按照输入的顺序输出。
import java.util.LinkedHashSet; import java.util.Set; public class TestLinkedHashSet { public static void main(String[] args) { Set<Integer> set =new LinkedHashSet<Integer>(); set.add(12); set.add(23); set.add(23); set.add(45); set.add(null); System.out.println(set); } }
运行结果:
[12, 23, 45,null]
HashSet:
HashSet实现类可以存放空值,向HashSet集合中传入元素时,HashSet会调用该对象的HashCode方法获取Hash值然后决定储存位置。不按照输入的顺序输出。
import java.util.HashSet; import java.util.Set; public class TestHashSet { public static void main(String[] args) { Set<Integer> set=new HashSet<Integer>(); set.add(12); set.add(34); set.add(56); set.add(12); set.add(null); System.out.println(set); } }
输出结果:
[null, 34, 56, 12]TreeSet:
(1)不允许放空元素,无参构造时,添加对象实现Comparable接口中的compareTo方法进行排序。
(2)如果传入一个实现Comparetor接口类,则用Comparetor中的compare方法。
(1)实例:
import java.util.Set; import java.util.TreeSet; public class TestTreeSet1 { public static void main(String[] args) { Set<Integer> set=new TreeSet<Integer>(); set.add(12); set.add(98); set.add(34); set.add(56); System.out.println(set); } }
运行结果:
[12, 34, 56, 98]
(2)实例:
import java.util.Comparator; import java.util.TreeSet; class compares implements Comparator<String>{ //compare方法中有两个参数,第一个是调用该方法的对象,第二个值集合中已经存入的对象。 public int compare(String a, String b) { //按照字符串长度比较, int n=a.length()-b.length(); //长度主要条件 return n==0?a.compareTo(b):n; } } public class TestComparetor { public static void main(String[] args) { TreeSet<String> set=new TreeSet<String>(new compares()); set.add("abcderty"); set.add("efghj"); set.add("hollee"); set.add("worde"); System.out.println(set); } }
运行结果:
[efghj, worde, hollee, abcderty]