Java 基础 - Set接口 及其实现类HashSet/LinkedHashSet/TreeSet

时间:2021-07-28 15:33:43

笔记:

/**Set接口 及其实现类
 * 公用操作同Collection:
 *  *          ①size(),clear()②isEmpty(),③contains(),④add()方法 和remove()方法,
 *  *          ⑤ iterator 来返回迭代器对象⑥addall() 和removeall() ,添加或者删除全部!
 *  *          ⑦ Object[] toArray() ,将集合转换为Object数组
 *  1.实现类HashSet 使用哈希存储元素,高性能,没有排序!(随机存储的!)
 *          a.构造方法: HashSet()/HashSet(Collection c); HashSet(初始容量[,装填因子])
 *  2.实现类LinkedHashSet :哈希表和链表实现了Set接口,具有可预测的迭代次序;
 *                   这种实现不同于HashSet,它维持于所有条目的运行双向链表;
 *  3.接口SortedSet : 有序对象的集合,集合里所有元素对象类型要求一致,
 *              a. first()/last()
 *              b. subset(begin,end) ,返回一个子集合, 下标左闭右开
 *              c.SortedSet<E> headSet/tailed(E element) ,返回一个 小于/大于element 的 SortedSet集合;
 *  4.接口SortedSet实现类TreeSet :使用红黑树进行操作,基于元素的值对元素排序,操作比HashSet慢!
 *              (有序输出,数字从小到大,字符串按ASCII从小到大排序)
 *              a.构造方法: TreeSet(collection c) ,集合中自然元素按照自然顺序(从大到小)进行排序
 *              b.指定排序规则:  TreeSet(Comparator c) ,创建空树,按照c 的规则进行排序
 * ------------------------------------
 *  5.对象排序  (记到下一章去了)
 *              a.实现Comparable 接口
 *
 *              b.比较器Comparator
 */

测试代码:

public class TestSet {

    public static void main(String[] args) {
        HashSet<String> s1= new HashSet<String>();
        s1.add("hello");s1.add("ssdf");s1.add("dadsasd");s1.add("6666asda9");s1.add("666sada67");
        TestSet.test(s1);
        TestSet.test(s1);
        //////////////////
        LinkedHashSet<String> s2= new LinkedHashSet<String>();
        s2.add("hello");s2.add("ssdf");s2.add("dadsasd");s2.add("6666asda9");s2.add("666sada67");
        TestSet.test(s2);
        ///////Test TreeSet///////////
        TreeSet<Integer> s3=new TreeSet<Integer>();
        s3.add(34534);s3.add(345341);s3.add(345342);s3.add(34534);s3.add(34);s3.add(84);
        test(s3);
        TreeSet<String> s4=new TreeSet<String>();
        s4.add("ass");s4.add("ASS");s4.add("ab");s4.add("sssssss");s4.add("SSSSSS");s4.add("zZZZ");
        test(s4);
    }
    static void test(Collection s){
        for(Object o:s){
            System.out.print(o+"\t");
        }

        System.out.println("---------->>"+s.getClass()+"---------");
    }
}

 

测试结果:

666sada67    ssdf    dadsasd    hello    6666asda9    ---------->>class java.util.HashSet---------
666sada67    ssdf    dadsasd    hello    6666asda9    ---------->>class java.util.HashSet---------
hello    ssdf    dadsasd    6666asda9    666sada67    ---------->>class java.util.LinkedHashSet---------
34    84    34534    345341    345342    ---------->>class java.util.TreeSet---------
ASS    SSSSSS    ab    ass    sssssss    zZZZ    ---------->>class java.util.TreeSet---------