<small id="7ktuj"></small>
      <bdo id="7ktuj"></bdo>
        <mark id="7ktuj"></mark>

        <source id="7ktuj"></source>
        <small id="7ktuj"></small>

        ITPub博客

        首頁 > 應用開發 > Java > java中Set的基本用法

        java中Set的基本用法

        原創 Java 作者:蝴蝶飛啊飛 時間:2019-10-25 11:39:44 0 刪除 編輯

        Set 集合的常用方法:

        初始化方法:Set<String> testSet = new HashSet<String>();

        testSet.add("Java");

        Set<String> testSet = new HashSet<String>(){{

             add("morning");

             add("afternoon");

        }}

        其他常用方法:add(E e) :如果 Set 集合中不存在指定元素,則增加此元素。 addAll(collection c) :如果 Set 集合中沒有指定 collection 中的所有元素,則增加。 clear() :移除 Set 中的所有元素。 contains(object o) :如果 Set 集合中包含指定元素,則返回 true containsAll(collection c) :如果 Set 集合中包含 collection 中的所有元素,返回 true equals(object o) :判斷指定對象與此 Set 集合是否相等。 hashCode() :返回此 Set 的哈希碼值。 isEmpty() :判斷 Set 集合是否為空,為空返回 true iterator() :返回在此 Set 的元素上進行迭代的迭代器。 remove(object o) :移除 Set 集合中的指定元素。 removeAll(collection c) :移除 Set 中包含在 collection 中的元素。 retainAll(collection c) :僅保留 Set 中包含在 collection 中的元素。 size() :返回 Set 集合中的元素的個數。

        toArray() :返回一個包含 Set 中所有元素的數組。

        Set 集合與 List 集合的區別就是, Set 集合的元素不能重復, List 集合的元素是可以重復的。

        //  HashSet LinkedHashSet 用法及特點

        /**

         * 編寫一個 ArrayList 集合 用 Set 去重

         * 為了保證順序  我們用 LinkedHashSet

         */

        public static void fun6() {

            ArrayList<String> aList = new ArrayList<>();

            aList.add("b");

            aList.add("a");

            aList.add("a");

            aList.add("b");

            aList.add("c");

            aList.add("c");

            LinkedHashSet<String> hSet = new LinkedHashSet<>();

            hSet.addAll(aList);

            aList.clear();

            aList.addAll(hSet);

            System.out.println(aList);

        }/**

         * 編寫一個 從鍵盤鍵入一連串字符串 , 將重復的字符串去掉 , 打印出不通過的字符

         */

        public static void fun5() {

            System.out.println(" 請輸入一連串字符 : ");

            Scanner scanner = new Scanner(System.in);

            String s1 = scanner.nextLine();

            char[] charArray = s1.toCharArray();

            HashSet<Character> hSet = new HashSet<>();

            for (int i = 0; i < charArray.length; i++) {

                hSet.add(charArray[i]);

            }

            System.out.println(hSet);

        }/**

         * 編寫一個 隨機 / 不重復的 10 個數的程序

         * Set 集合實現不重復

         */

        public static void fun4() {

            HashSet<Integer> hSet = new HashSet<>();

            while (hSet.size() < 10) {

                int i1 = (int)(Math.random() * (20 - 1 + 1) - 1);

                hSet.add(i1);

            }

            System.out.println(hSet);

        }/**

         * LinkedHashSet 特點 : 有序的 ( 怎么存的可以怎么取出來 )

         * 底層實現是鏈表實現

         * 同樣具有 Set 的去重的特點

         */

        Set clear() 方法

        set 是一個無序集合,方法很多, set 只允許添加同一類型的數據,這個在使用 add(), addAll() 的時候只需要注意集合是否已經有值,即將加入的值是否跟當前外匯返傭http://www.kaifx.cn/里面的值是否是同一類型即可,此問題比較簡單,今天我們說一下 clear() 方法;使用時一定要注意 : 它會將連同里面的對象的值一起清除; `

        通過測試我們發現,使用clear() 之前我們 map 中的值一直存在;使用之后,不僅清除了 set 中的數據,我們 map 中的數據一起被清除;但是 map 對象依然存在,我們可以重新加入新類型的數據;

        測試代碼

         public static void main(String[] args) {

                Map map = new HashMap();

                // 加入 int 數據

                map.put("a", 1);

                map.put("b", 2);

                map.put("c", 3);        Set set = map.keySet();

                System.out.println(set);        set = map.entrySet();

                System.out.println("map--- " + map);

                System.out.println("set--- " + set);        // 使用 clear

                set.clear();

                System.out.println("map--- " + map);

                System.out.println("set--- "+set);        // 加入新類型(字符串)的數據

                map.put("a", " 測試 ");

                map.put("b", " 測試結束 ");

                System.out.println("map--- 重新加入 " + map);

            }

        測試結果

        [a, b, c]

        map--- {a=1, b=2, c=3}

        set--- [a=1, b=2, c=3]

        map--- {}

        set--- []

        map--- 重新加入 {a= 測試 , b= 測試結束 }

        public static void fun3() {

            LinkedHashSet<String> lSet = new LinkedHashSet<>();

            lSet.add("c");

            lSet.add("a");

            lSet.add("a");

            lSet.add("c");

            lSet.add("b");

            lSet.add("b");

            lSet.add("d");

            lSet.add("d");

            for (String string : lSet) {

                System.out.println(string);

            }

        }/**

         * 去除對象 --- 需要重寫 HashCode() equals()

         */public static void fun2() {

            HashSet<Person> hSet = new HashSet<>();

            hSet.add(new Person(" 科比 " , 18));

            hSet.add(new Person(" 加索爾 " , 19));

            hSet.add(new Person(" 費舍爾 " , 20));

            hSet.add(new Person(" 拜納姆 " , 21));

            hSet.add(new Person(" 奧多姆 " , 22));

            hSet.add(new Person(" 奧多姆 " , 22));

            hSet.add(new Person(" 科比 " , 18));

            hSet.add(new Person(" 加索爾 " , 19));

            hSet.add(new Person(" 費舍爾 " , 20));

            hSet.add(new Person(" 拜納姆 " , 21));

            for (Person personCopy : hSet) {

                System.out.println(personCopy);

            }

        }/**

         * Set 接口特點 : 無下標 無順序 ** 無重復 **

         */

        public static void fun1() {

            HashSet<String> hSet = new HashSet<>();

            hSet.add("c");

            hSet.add("a");

            hSet.add("a");

            hSet.add("c");

            hSet.add("b");

            hSet.add("b");

            hSet.add("d");

            hSet.add("d");    for (String string : hSet) {

                System.out.println(string);

            }

        }

        TreeSet 用法及特點 //   計數器

        /**

         * 鍵盤錄入 5 個學生信息 ( 姓名 , 語文成績 , 數學成績 , 英語成績 )

         * 按照總分從高到低輸出到控制臺。

         */

        public static void fun13() {

            System.out.println(" 請輸入姓名及成績 :");

            Scanner scanner = new Scanner(System.in);

            TreeSet<Clases1> tSet = new TreeSet<>();

            while(tSet.size() < 5) {

                String s1 = scanner.nextLine();

                String[] split = s1.split(",");

                int parseInt = Integer.parseInt(split[1]);

                int parseInt2 = Integer.parseInt(split[2]);

                int parseInt3 = Integer.parseInt(split[3]);

                int num = parseInt + parseInt2 + parseInt3;

                tSet.add(new Clases1(split[0], parseInt, parseInt2, parseInt3, num));    }

            System.out.print(tSet);

        }/**

         * 程序啟動后 , 可以從鍵盤輸入接收多個整數 , 直到輸入 quit 時結束輸入 .

         * 把所有輸入的整數倒序排列打印 .

         */

        public static void fun12() {

            System.out.println(" 請輸入一個字符串 ");

            Scanner scanner = new Scanner(System.in);

            TreeSet<Integer> tSet = new TreeSet<>(new Compara3());

            while(true) {

                String s1 = scanner.nextLine();

                if (s1.equals("quit")) {

                    break;

                }

                int parseInt = Integer.parseInt(s1);

                tSet.add(parseInt);

            }

            System.out.println(tSet);

        }/**

         * 鍵盤接受一個字符串  程序對其中所有字符進行排序

         */

        public static void fun11() {

            System.out.println(" 請輸入一串字符串 : ");

            Scanner scanner = new Scanner(System.in);

            String s1 = scanner.nextLine();

            char[] charArray = s1.toCharArray();

            TreeSet<Character> tSet = new TreeSet<>(new Compara2());

            for (int i = 0; i < charArray.length; i++) {

                tSet.add(charArray[i]);

            }

            System.out.println(tSet);

        }/**

         * ArrayList 存儲無序并且重復的字符串 , 要求排序  并且不能去除重復

         */

        public static void fun10() {

            ArrayList<String> aList = new ArrayList<>();

            aList.add("aaa");

            aList.add("asd");

            aList.add("ww");

            aList.add("zz");

            aList.add("CC");

            aList.add("a");

            aList.add("bcd");

            aList.add("aaa");

            TreeSet<String> tSet = new TreeSet<>(new compara1());

            tSet.addAll(aList);

            aList.clear();

            aList.addAll(tSet);

            System.out.println(aList);

        }/**

         * 使用比較器 比較排序集合中的元素 . 要求保留重復

         * 重寫比較器 comparator<T> 接口 實現自己想要的比較方法

         * 注意 : 要記著將 comparator 的實現類要創建在 集合中

         */

        public static void fun9() {

            TreeSet<String> tSet = new TreeSet<>(new compara1());

            tSet.add("aaa");

            tSet.add("asd");

            tSet.add("ww");

            tSet.add("zz");

            tSet.add("CC");

            tSet.add("a");

            tSet.add("bcd");

            tSet.add("aaa");

            System.out.println(tSet);

        }/**

         * TreeSet 存儲類對象 , 進行排序 要在創建對象的類中重寫 compareTo 方法

         * TreeSet 存儲的是類對象 , 就要看 compareTo 的返回值

         * 返回 0   只是一個值

         * 返回正數  按存進順序 正序

         * 返回負數  按存進順序 倒序

         *

         * TreeSet 內部使用 二叉樹來存儲的

         *   核心 :

         *       比我小的數存在左邊 ( 返回負數時 )

         *       比我大的數存在右邊 ( 返回正數時 )

         *       不存儲 ,   兩個數相等 ( 返回 0 )

         *

         */

        public static void fun8() {

            TreeSet<Man> tSet = new TreeSet<>();

            tSet.add(new Man(" 科比 ", 19));

            tSet.add(new Man(" 喬丹 ", 20));

            tSet.add(new Man(" 庫里 ", 21));

            tSet.add(new Man(" 格林 ", 18));

            tSet.add(new Man(" 書豪 ", 19));

            tSet.add(new Man(" 書豪 ", 200));

            System.out.println(tSet);

        }/**

         * TreeSet 的特點 : ** 排序 **( 去重 )

         */

        public static void fun7() {

            TreeSet<Integer> tSet = new TreeSet<>();

            tSet.add(5);

            tSet.add(4);

            tSet.add(1);

            tSet.add(2);

            tSet.add(3);

            tSet.add(5);

            tSet.add(5);

            for (Integer integer : tSet) {

                System.out.println(integer);

            }

        }

        總結:

        Set 中的元素是不能重復的,如果使用 add(Object obj) 方法添加已經存在的對象,則會覆蓋前面的對象

        為什么要使用集合類

        當你事先不知道要存放數據的個數,或者你需要一種比數組下標存取機制更靈活的方法時,你就需要用到集合類。

        來自 “ ITPUB博客 ” ,鏈接:http://www.ep4tq.com/69946279/viewspace-2661386/,如需轉載,請注明出處,否則將追究法律責任。

        請登錄后發表評論 登錄
        全部評論
        管他誰是誰非,做自己的主宰,我是這條街最亮的崽!

        注冊時間:2019-08-22

        • 博文量
          49
        • 訪問量
          21835
        妹子图每日分享