zoukankan      html  css  js  c++  java
  • HashSet、LinkedHashSet和TreeSet

    1. 关键技术:  
    2.   
    3.     HashSet采用散列函数对元素进行排序,是专门为快速查询而设计的。存入HashSet的对象必须定义hashCode方法。  
    4.     TreeSet采用红黑树的数据结构进行排序元素,使用它可以从Set中提取有序(升序或者降序)的序列。需要注意的是,存入自定义类时,TreeSet需要维护元素的存储顺序,因此自定义类要实现Comparable接口并定义compareTo方法。  
    5.     LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素插入的次序,在使用迭代器遍历Set时,结果会按元素插入的次序显示。  
    关键技术:
    
        HashSet采用散列函数对元素进行排序,是专门为快速查询而设计的。存入HashSet的对象必须定义hashCode方法。
        TreeSet采用红黑树的数据结构进行排序元素,使用它可以从Set中提取有序(升序或者降序)的序列。需要注意的是,存入自定义类时,TreeSet需要维护元素的存储顺序,因此自定义类要实现Comparable接口并定义compareTo方法。
        LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素插入的次序,在使用迭代器遍历Set时,结果会按元素插入的次序显示。
    1. package book.arrayset;  
    2.   
    3. import java.util.ArrayList;  
    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. }  
  • 相关阅读:
    黑盒测试方法用例设计详解
    跨域
    HTTP Referer
    Java抽象类和接口
    深入理解Java垃圾回收机制
    Java异常处理机制
    hash
    JUint4的下载、配置及对一个算法编写单元测试用例(测试多组数据每组多个参数)
    get和post的区别
    Mac 文档阅读软件Dash软件破解版
  • 原文地址:https://www.cnblogs.com/heartstage/p/3409631.html
Copyright © 2011-2022 走看看