zoukankan      html  css  js  c++  java
  • (JAVA容器)Set成员的特点

      Set具有与Collection完全一样的接口,因此没有特有的功能。Set与List最大的不同在于Set中的成员不能重复,也就是说Set中任意两个成员间互相调用方法equals必须返回为false(o1.equals(o2)=true并且o2.equals(o1)=true)。如果将两个互相调用equals返回true的对象插入Set中,只会保留其中一个。本节主要介绍各个Set成员的特点以及利用Comparator和Comparable接口实现容器排序的方法。

    常用的Set有三个,他们都实现了Set接口,并且具有各自的特点。

    HashSet为快速查找而设计的Set,存入HashSet的对象必须定义HashCode方法,其底层实现是一个哈希表,存入HashSet中的元素没有顺序性。

    TreeSet为保持Set中成员有序而设计的一个Set的子类,存入TreeSet中的对象如果实现了Comparable接口,则将按照该接口的compareTo方法比较大小后按照升序排列,程序员也可以在构造方法中直接指定比较器。

    LinkedHashSet具有HashSet的查询速度,且底层使用链表维护元素的顺序,也就是说元素的顺序与插入的顺序相同(注意与TreeSet中元素的顺序区别)。

    下面就演示一下这三种类型的Set的特点

    代码如下:

    package net.chelson.chapter9;
    import java.util.HashSet;
    import java.util.LinkedHashSet;
    import java.util.Set;
    import java.util.TreeSet;
    public class SetTest {
        //测试插入重复数据的情况
        public void testRebundant(Set set) {
            set.add("chelson");
            set.add("chelson");
            set.add("chelson");
            System.out.println("插入重复数据后"+ set.getClass().getName() +"的成员为: " + set);
        }
        //测试set内部元素排列顺序
        public void testOrder(Set set) {
            set.add("b");
            set.add("a");
            set.add("c");
            System.out.println(set.getClass().getName() +"的成员顺序是: " + set);
        }
        public static void main(String[] args) {
            SetTest st = new SetTest();
            st.testOrder(new HashSet());
            st.testOrder(new LinkedHashSet());
            st.testOrder(new TreeSet());
            st.testRebundant(new HashSet());
            st.testRebundant(new LinkedHashSet());
            st.testRebundant(new TreeSet());
        }
    }

    运行结果如下:

    程序中testRedundant方法用于测试插入等值元素后Set成员的变化情况,testOrder方法测试插入不同元素后Set是如何排列这些元素的顺序的,main方法分别对三中类型的Set测试了插入成员顺序以及冗余元素纯收入的结果,从运行结果可以看出插入HashSet中的元素没有固定的顺序,插入LinkedHashSet中的元素顺序与插入的顺序相同,插入TreeSet中的元素顺序是按照字母的排列顺序排列的,而如果在同一个Set中重复插入相同的元素,则Set中只会保留一个元素。

  • 相关阅读:
    NOIP前咕咕 : BZOJ3172: [Tjoi2013]单词
    BZOJ4350: 括号序列再战猪猪侠【区间DP】
    Codeforces 983B. XOR-pyramid【区间DP】
    POJ1651 Multiplication Puzzle【区间DP】
    LOJ10131. 「一本通 4.4 例 2」暗的连锁【树上差分】
    UOJ22. 【UR #1】外星人【DP】【思维】
    BZOJ5125: [Lydsy1712月赛]小Q的书架【决策单调性优化DP】【BIT】【莫队】【分治】
    Codeforces 868F. Yet Another Minimization Problem【决策单调性优化DP】【分治】【莫队】
    BZOJ1835: [ZJOI2010]base 基站选址【线段树优化DP】
    Codeforces 165 E. Compatible Numbers【子集前缀和】
  • 原文地址:https://www.cnblogs.com/lidaojian/p/2567109.html
Copyright © 2011-2022 走看看