一、set中不允许存在相同的元素
package ZangJie7; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class SetDemo { /** * sets和list一样,都是集合,唯一不同的在于sets里面的元素不能重复, */ public static void main(String[] args) { Set <String> set = new HashSet<String>(); //在集合中添加元素 set.add("BWm"); set.add("AoDi"); set.add("HonDa"); set.add("HonDa"); System.out.println(set); List<String> list = new ArrayList<String>(); list.add("BWm"); list.add("AoDi"); list.add("HonDa"); list.add("HonDa"); System.out.println(list); } }
运行结果为:(set中不允许存在相同的元素,所以只打印了一个“HonDa”)
二、使用不同是set集合,排序结果不同
package ZangJie7; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; import java.util.TreeSet; public class SetDemo { /** * sets和list一样,都是集合,唯一不同的在于sets里面的元素不能重复, */ public static void main(String[] args) { // HsahSet不保证存和取的顺序一样 Set <String> set = new HashSet<String>(); //在集合中添加元素 set.add("BWm"); set.add("AoDi"); set.add("HonDa"); set.add("HonDa"); // 使用高级for循环来读取集合中的元素 for(String item:set) { System.out.println("HashSet读取的元素顺序:"+item); } System.out.println(); // LinkHashSet 保证有序 Set <String> lset = new LinkedHashSet<String>(); //在集合中添加元素 lset.add("BWm"); lset.add("AoDi"); lset.add("HonDa"); // 使用高级for循环来读取集合中的元素 for(String item:lset) { System.out.println("LinkedHashSet读取的元素顺序:"+item); } System.out.println(); // TreeSet以自然排序的方式来对进行元素排序 Set <String> tset = new TreeSet<String>(); //在集合中添加元素 tset.add("BWm"); tset.add("AoDi"); tset.add("HonDa"); // 使用高级for循环来读取集合中的元素 for(String item:tset) { System.out.println("TreeSet读取的元素顺序:"+item); } /* List<String> list = new ArrayList<String>(); list.add("BWm"); list.add("AoDi"); list.add("HonDa"); list.add("HonDa"); System.out.println(list);*/ } }
运行结果为:
三、set集合存储性能顺序
HashSet按照hash值存储,例如读书馆中书放在那个书架上都是有记录的,找书时不需要每个书架都找一遍,直接去对应的书架拿即可。
TreeSet需要保证自然顺序
四、那set集合分为hashSet、treeSet和linkedHashSet,我们怎么来区分什么情况下使用:
1、如果我们需要将元素排序, 那么使用TreeSet
2、如果我们不需要排序, 使用HashSet, HashSet比TreeSet效率高
3、如果我们需要保留存储顺序, 又要过滤重复元素, 那么使用LinkedHashSet