1. 程式人生 > >java -- Set 用法及特點

java -- Set 用法及特點

Hashset 和 ListHashSet用法及特點

//  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的去重的特點
 */
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)方法新增已經存在的物件,則會覆蓋前面的物件
為什麼要使用集合類
當你事先不知道要存放資料的個數,或者你需要一種比陣列下標存取機制更靈活的方法時,你就需要用到集合類。

相關推薦

java -- Set 用法特點

Hashset 和 ListHashSet用法及特點 // HashSet 和 LinkedHashSet 用法及特點 /** * 編寫一個ArrayList集合 用Set去重 * 為了保證順序 我們用LinkedHashSet */ publ

Java學習筆記之二十二】解析接口在Java繼承中的用法實例分析

ani 復制代碼 ads compute 現在 target body 常量 實現接口 一、定義 Java接口(Interface),是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具

list,map,set集合的基本用法差異

nbsp htable body 根據 pos null clas 速度 就是 List:1.可以允許重復的對象。    2.可以插入多個null元素。 3.是一個有序容器,保持了每個元素的插入順序,輸出的順序就是插入的順序。 4.常用的實

set uid ,set gid ,sticky bit用法區別

三種權限suid:以屬主的身份去執行命令任何命令、程序在執行期間都具有身份[user2@room9pc01 ~]$ ls /root #失敗[root@room9pc01 ~]# chmod u+s /usr/bin/ls [user2@room9pc01 ~]$ touch u1.txt #to

Java中compareTo用法原始碼解析

最近遇到一個問題,在日期比較的時候,很麻煩,因為日期比較沒有大於等於,只有大於或者小於,這就導致在比較時間的時候特別麻煩,而且還要由string轉成date格式才能比較,下面是我使用compareTo比較時間字串的程式碼: String putStartTime = Date

java多執行緒、FutureTask的用法兩種常用的使用場景

Java多執行緒實現的方式有四種 1.繼承Thread類,重寫run方法 2.實現Runnable介面,重寫run方法,實現Runnable介面的實現類的例項物件作為Thread建構函式的target 3.通過Callable和FutureTask建立執行緒 4.通過執行緒池

Java-API-Class類詳解、用法泛化

Java-API-Class類詳解、用法及泛化 轉載宣告: 本文系轉載自以下文章: Java中Class類詳解、用法及泛化 作者: 老白講網際網路 轉載僅為方便學習檢視,一切權利屬於原作者,本人只是做了整理和排版,如果帶來不便請聯絡我刪除。 0x01 摘要

Java——Set集合(介面)(二)___TreeSet用法

Set(介面)集合:          TreeSet類(底層是二叉樹),能保證有序,用來對元素進行排序,能保證元素的唯一          使用方式:          1.自然順序:TreeSet類的add()方法中會把存入的物件提升為Comparable型別      

Java Set集合詳解Set與List的區別

Java中的Set集合是繼承Collection的介面,是一個不包含重複元素的集合。     下圖是Set集合的原始碼。 Set和List都是以介面都形式來進行宣告。Set主要包含三種存放資料型別都變數,分別是HashSet,LinkedHashSet,TreeSet

Redis 高階 Java 客戶端 Lettuce 的用法踩坑經驗

                如果你在網上搜索 Redis 的 Java 客戶端,你會發現,大多數文獻介紹的都是 Jedis,不可否認,Jedis 是一個優秀的基於 Java 語言的 Redis 客戶端,但是,其不足也很明顯:Jedis 在實現上是直接連線 Redis-Server,在多個執行緒間共享一個

Java產生隨機數用法基本用法(轉)

1.隨機產生四位數[1000,9999] num=(int)(Math.random()*9000)+1000; Math.random()方法是產生double型[0,1)的資料,[0,1)*9000=[1,9001),用int型別強轉後便是[0,8999], 因而可以得到1000~9

java 陣列的定義格式特點

class FunctionDemo {     /* 陣列的定義     1、同一種資料型別的集合,其實陣列就是一個容器     2、可以自動給陣列中的元素從0開始自動編號,方便操作這些元素     3、陣列格式:     資料型別[] 陣列名 = new 元素型別[元

Java中split()函式的用法一些注意細節

String.split("要切割的準側")返回的是一個String[ ]的首地址;String.split("要切割的準側").length 返回的是這個String被切割後的子字串的個數(及被切割成了幾個段);String.split(""),此時,切割後的第一個段是空

JAVA關鍵字Static作用 特點 利弊建立時機 成員變數和靜態變數 Static修飾成員 修飾方法 修飾塊(靜態快)

(1)Static關鍵字修飾符 可以修飾成員(成員屬性 成員方法)(2)Static修飾成員的特點a 生命週期長 跟類相同b 用Static修飾的變數 所有物件共享c Static修飾變數 可以通過物件(.)點的形式呼叫 還可以通過類名(.)點方法呼叫(3)Static建立時

list set map的特點區別

List,Set,Map是否繼承自Collection介面? 答:List,Set是,Map不是。 Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素。一些Collection允許相同的元素而另一些不行。一些能

Java_基礎Set集合概述特點

Collection         List    有序,可重複.         Set    無序,唯一.         HashSet:              底層為HashMap。             步驟: 先看hashCode()值是否相同

Java中foreach用法常用集合操作

foreach語句是java5的新特徵之一,在遍歷陣列、集合方面,foreach為開發人員提供了極大的方便。  foreach語句是for語句的特殊簡化版本,但是foreach語句並不能完全取代for語句,然而,任何的foreach語句都可以改寫為for語句版本。  for

Java的synchronized用法死鎖

《程式設計思想之多執行緒與多程序(1)——以作業系統的角度述說執行緒與程序》一文詳細講述了執行緒、程序的關係及在作業系統中的表現,這是多執行緒學習必須瞭解的基礎。本文將接著講一下Java執行緒同步中的一個重要的概念synchronized. synchronized是J

Java關鍵字解釋用法

轉載自百度文庫 abstract - 1 - boolean - 2 - break - 2 - byte - 2 - case - 3 - catch - 3 - char - 4 - class - 4 - continue - 5 - default - 5 - do - 6 - double -