HashSet、LinkedHashSet和TreeSet

[plain] view plaincopyprint?java

  1. 关键技术:  数据结构

  2.   

  3.     HashSet采用散列函数对元素进行排序,是专门为快速查询而设计的。存入HashSet的对象必须定义hashCode方法。  函数

  4.     TreeSet采用红黑树的数据结构进行排序元素,使用它能够从Set中提取有序(升序或者降序)的序列。须要注意的是,存入自定义类时,TreeSet须要维护元素的存储顺序,所以自定义类要实现Comparable接口并定义compareTo方法。  spa

  5.     LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素插入的次序,在使用迭代器遍历Set时,结果会按元素插入的次序显示。  .net


[java] view plaincopyprint?设计

  1. package book.arrayset;  对象

  2.   

  3. import java.util.ArrayList;  blog

  4. import java.util.HashSet;  排序

  5. import java.util.Iterator;  接口

  6. import java.util.LinkedHashSet;  

  7. import java.util.List;  

  8. import java.util.Set;  

  9. import java.util.TreeSet;  

  10.   

  11. /** 

  12.  * 演示各类Set的使用 

  13.  * 存入Set的每一个元素必须是惟一的,由于Set不保存重复元素。 

  14.  */  

  15. public class TestSet {  

  16.   

  17.     /** 

  18.      * 初始化Set的元素 

  19.      * @param set 

  20.      */  

  21.     public static void init(Set set){  

  22.         if (set != null){  

  23.             set.add("aaa");  

  24.             set.add("ccc");  

  25.             set.add("bbb");  

  26.             set.add("eee");  

  27.             set.add("ddd");  

  28.         }  

  29.     }  

  30.     /** 

  31.      * 输出set的元素 

  32.      * @param set 

  33.      */  

  34.     public static void output(Set set){  

  35.         if (set != null){  

  36.             //使用迭代器遍历Set,也只有这一种方法  

  37.             Iterator it = set.iterator();  

  38.             while (it.hasNext()){  

  39.                 System.out.print(it.next() + " ");  

  40.             }  

  41.         }  

  42.         System.out.println();  

  43.     }  

  44.     /** 

  45.      * 使用HashSet 

  46.      */  

  47.     public static void testHashSet(){  

  48.         Set mySet = new HashSet();  

  49.         init(mySet);  

  50.         System.out.println("使用HashSet: ");  

  51.         output(mySet);  

  52.     }  

  53.     /** 

  54.      * 使用TreeSet 

  55.      */  

  56.     public static void testTreeSet(){  

  57.         Set mySet = new TreeSet();  

  58.         init(mySet);  

  59.         System.out.println("使用TreeSet: ");  

  60.         output(mySet);  

  61.     }  

  62.     /** 

  63.      * 使用LinkedHashSet 

  64.      */  

  65.     public static void testLinkedHashSet(){  

  66.         Set mySet = new LinkedHashSet();  

  67.         init(mySet);  

  68.         System.out.println("使用LinkedHashSet: ");  

  69.         output(mySet);  

  70.     }  

  71.     public static void main(String[] args) {  

  72.         TestSet.testHashSet();  

  73.         TestSet.testTreeSet();  

  74.         TestSet.testLinkedHashSet();  

  75.           

  76.         Set mySet = new HashSet();  

  77.         init(mySet);  

  78.         //Set不容许元素重复  

  79.         mySet.add("aaa");  

  80.         mySet.add("bbb");  

  81.         System.out.println("为mySet加入aaa, bbb元素后: ");  

  82.         output(mySet);  

  83.         //删除元素  

  84.         mySet.remove("aaa");  

  85.         System.out.println("mySet删除aaa元素后: ");  

  86.         output(mySet);  

  87.         //增长另一个集合中的全部元素  

  88.         List list = new ArrayList();  

  89.         list.add("aaa");  

  90.         list.add("aaa");  

  91.         list.add("fff");  

  92.         mySet.addAll(list);  

  93.         System.out.println("mySet添加另一个集合的全部元素后: ");  

  94.         output(mySet);  

  95.         //删除除了另一个集合包含的之外的全部元素  

  96.         mySet.retainAll(list);  

  97.         System.out.println("mySet删除除了另一个集合包含的之外的全部元素后: ");  

  98.         output(mySet);  

  99.         //删除另一个集合包含的全部元素  

  100.         mySet.removeAll(list);  

  101.         System.out.println("mySet删除另一个集合包含的全部元素后: ");  

  102.         output(mySet);  

  103.         //获取Set中元素的个数  

  104.         System.out.println("mySet中当前元素的个数: " + mySet.size());  

  105.         //判断Set中元素个数是否为0  

  106.         System.out.println("mySet中当前元素为0?  " + mySet.isEmpty());  

  107.           

  108.         /** 

  109.          * (1)Set不容许重复元素,所以加入Set的Object必须定义equals()方法以确保对象的惟一性。 

  110.          * (2)HashSet采用散列函数对元素进行排序,是专门为快速查询而设计的。存入HashSet的对象必须定义hashCode()。 

  111.          * (3)TreeSet采用红黑树的数据结构进行排序元素,能保证元素的次序,使用它能够从Set中提取有序的序列。 

  112.          * 须要注意的是,生成本身的类时,Set须要维护元素的存储顺序,所以要实现Comparable接口并定义compareTo()方法。 

  113.          * (4)LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的插入的次序,在使用迭代器遍历Set时,结果会按元素插入的次序显示。 

  114.      */  

  115.     }  

  116. }  

相关文章
相关标签/搜索