第十七天

来源:http://www.cnblogs.com/beyondcj/archive/2017/01/10/6270769.html
-Advertisement-
Play Games

集合技術 作業 作業 猜數字游戲 猜數字游戲 /* * 猜數字游戲 */ public class HomeWork1 { public static void main(String[] args) { // 獲取被猜的那個數字,需要使用隨機數類產生 Random r = new Random() ...


集合技術

  1. 作業

    1. 猜數字游戲

/*

* 猜數字游戲

*/

public class HomeWork1 {

    public static void main(String[] args) {

        // 獲取被猜的那個數字,需要使用隨機數類產生

        Random r = new Random();

        // 獲取到1~100之間的一個數字

        int number = r.nextInt(100) + 1;

        // 創建專門負責鍵盤錄入的那個對象

        Scanner sc = new Scanner( System.in );

        // 使用死迴圈,完成數字的判斷和重覆輸入功能

        while( true ){

            // 獲取鍵盤錄入的數字

            System.out.println("請輸入您猜的數字(範圍1~100):");

            int x = sc.nextInt();

            // 判斷當前輸入的數字和被猜的那個數字關係

            if( x == number ){

                System.out.println("恭喜您,猜中啦!!!");

                break;

            }else if( x < number ){

                System.out.println("您猜小了,請繼續");

            }else{

                System.out.println("您猜大了,請繼續");

            }

        }

    }

}

 

  1. Collection集合回顧

集合:Collection介面,它是集合的頂層介面。其中定義了集合共性的操作方法。

增:add、addAll

刪除:clear、remove、removeAll、RetainAll

查詢:size

遍歷:iterator,得到一個迭代器對象

判斷:contains、containsAll、isEmpty

    

    迭代器對象:Iterator,它是所有集合共有的迭代對象

  1. 先要判斷,使用hasNext方法
  2. 取出元素,使用next方法

細節:

  1. 一次判斷,最好使用一次next方法
  2. 在遍歷的時候,不要使用集合自身的增刪方法修改集合。

 

List介面:

Set介面:

  1. List介面

    1. List介面特點

List介面它是Collection介面的子介面。List介面下的所有集合容器:

  1. 有序
  2. 可以重覆
  3. 有下標

 

由於List介面下的集合擁有下標,因此List介面擁有自己特有的方法:這些方法都是圍繞下標設計的。

    add(int index , Object element )

    remove( int index )

    get( int index )

    set( int index , Object element )

    

List介面自己的迭代器:

    ListIterator:它可以正向或逆向遍歷List集合。同時可以對集合進行增,刪、改、查操作。

  1. ArrayList集合

ArrayList:它的底層是可變數組,查詢快,增刪慢,不安全!

  1. LinkedList集合

    1. LinkedList介紹:

LinkedList集合,它也List介面的實現類。和ArrayList相同。都可以去使用List介面中的所有方法。

sun公司給List介面提供多個實現類的目的:

    原因是實際開發中,我們需要不同的容器來存儲不同對象。

不同的容器:每個容器都有自己對數據的存儲方式(數據結構)。不同方式結構存儲的數據,它們在性能上差異很大。

        

        LinkedList集合:它的底層是鏈接列表結構(鏈表)。

  1. LinkedList數據結構(理解鏈表結構):

鏈表:它主要也是用來存儲數據。存儲數據的每個空間被稱為節點。

節點一般分成2個小空間:一個存儲的節點的地址,一個存儲的真正存放的數據。

    

  1. LinkedList結構演示(編寫代碼測試)

由於LinkedList集合底層是鏈表結構。因此LinkedList集合在List介面之上,有增加了圍繞頭和尾而設計的增、刪、改、查操作。

xxxxFirst 和 xxxxxLast方法

    // 刪除方法

    public static void demo2() {

        /// 創建集合對象

        LinkedList list = new LinkedList();

        

        // 添加元素

        list.addFirst("aaa");

        list.addFirst("bbb");

        list.addLast("ccc");

        

        // 刪除方法

        Object obj = list.removeFirst();

        System.out.println(obj);

        

        System.out.println(list);

        

    }

 

    // 添加方法

    public static void demo1() {

        /// 創建集合對象

        LinkedList list = new LinkedList();

        

        // 添加元素

        list.addFirst("aaa");

        list.addFirst("bbb");

        list.addLast("ccc");

        

        // 遍歷

        for( Iterator it = list.iterator() ; it.hasNext() ; ){

            System.out.println(it.next());

        }

    }

  1. 模擬數據結構

    /*

     * 由於LinkedList集合它有頭和尾,因此經常使用這個集合模擬其他的數據結構

     * 隊列結構:這種結構存儲的數據在容器,最先進入容器的元素,先先出去。

     *     簡單介紹:先進先出,後進後出

     *     例如:排隊買票。火車過山洞。

     *

     * 堆棧結構:這種結構存儲的數據在容器,最先進入的最後出去

     *     簡單介紹:先進後出,後進先出。

     *     例如:彈夾。Java中的棧記憶體。

     */

    public static void demo3() {

        

        /// 創建集合對象

        LinkedList list = new LinkedList();        

        

        // 添加元素

        list.addLast("aaa");

        list.addLast("bbb");

        list.addLast("ccc");

        list.addLast("ddd");

        list.addLast("eee");

        

        // 模擬隊列結構

        System.out.println(list.removeFirst());

        System.out.println(list.removeFirst());

        System.out.println(list.removeFirst());

        System.out.println(list.removeFirst());

        System.out.println(list.removeFirst());

        

        /*

         * 結論:使用LinkedList模擬隊列結構的時候:

         *     添加和刪除的方法調用正好相反。

         *     添加使用addLast ,刪除就使用removeFirst

         *     添加使用addFirst,刪除就使用removeLast

         *     

         * 模擬堆棧結構:

         * 添加使用addLast ,刪除就使用removeLast

         * 添加使用addFirst ,刪除就使用removeFirst

         */    

    }

  1. Vector集合

    1. Vector集合介紹

Vector集合它是JDK1.0時期存在的集合。其功能和ArrayList集合相同。

Vector的底層使用的也是可變數組。Vector集合它增刪、查詢都慢。它的底層是安全的。後期看到Vector集合,就當作ArrayList集合使用。

 

  1. Vector集合演示

    // 使用Iterator遍歷

    public static void demo1() {

        

        // 創建集合對象

        Vector v = new Vector();

        

        // 添加方法

        v.addElement("aaa");

        v.add("bbb");

        v.add("bbb");

        v.add("ccc");

        

        // 使用Iterator遍歷

        for( Iterator it = v.iterator() ; it.hasNext() ; ){

            System.out.println(it.next());

        }

    }

 

  1. Enumeration介面(知道這個介面作用)

    // 使用古老的枚舉迭代器遍歷

    public static void demo2() {

        // 創建集合對象

        Vector v = new Vector();

        

        // 添加方法

        v.addElement("aaa");

        v.add("bbb");

        v.add("bbb");

        v.add("ccc");

        

        /*

         * 使用Vector中的 elements 方法可以得到一個枚舉迭代器(早期迭代器)

         * Enumeration : 它是一個介面,主要用來遍歷集合(Vector)

         * Enumeration這個介面被Iterator代替,並且Iterator中有remove方法,

         *     Iterator中的方法名稱較短。

         */

        Enumeration en = v.elements();

        while( en.hasMoreElements() ){

            System.out.println(en.nextElement());

        }

    }

 

  1. List介面總結:

List介面:它限定它下麵的所有集合容器擁有下標、可以存放重覆元素、有序。其中定義了圍繞下標而操作的方法。

 

ArrayList:

    底層是可變數組。增刪慢、查詢快。不安全。可以使用null作為元素。

LinkedList:

    底層是鏈表結構。增刪快、查詢慢,不安全。可以使用null作為元素。其中定義了圍繞頭和尾的方法,可以模擬 隊列或堆棧數據結構。

Vector:

    底層是可變數組,被ArrayList代替。什麼都慢。但安全。可以使用null作為元素

 

Enumeration:它是古老的迭代器。被Iterator代替。

  1. Set介面

    1. Set介面介紹

前面學習Collection介面的時候,下麵有2個子介面:

    List介面:可以保存重覆元素,有下標,有序。

    Set介面:可以保存不重覆元素。

 

    註意:Set介面沒有自己特有的方法,所有方法全部來自於Collection介面。

  1. HashSet集合(重點

Set介面下的所有集合容器中保存的元素都不會重覆。

Set介面下有2個重要的集合:

    HashSet:

    TreeSet:

  1. HashSet集合介紹

 

HashSet:它的底層是哈希表結構支持。它不保證迭代順序(存取),同時它不安全。

 

  1. HashSet演示

/*

* 演示 HashSet集合

*/

public class HashSetDemo {

    public static void main(String[] args) {

        

        // 創建集合對象

        HashSet set = new HashSet();

        

        // 添加元素

        set.add("aaa");

        set.add("aaa");

        set.add("bbb");

        set.add("ccc");

        set.add("ccc");

        set.add("ddd");

        

        // 使用Iterator遍歷

        for( Iterator it = set.iterator() ; it.hasNext() ; ){

            System.out.println( it.next() );

        }        

    }

}

  1. 哈希表介紹(理解哈希表存儲元素方式)

哈希表:它也是一種存儲數據的方式。它的底層使用的依然是數組,只是在存儲元素的時候不按照數組下標從小到大的順序存放。

如果有元素需要給哈希表結構中保存的時候,這時不會直接將元素給表中保存,而是根據當前這個元素自身的一些特點(成員變數等)計算這個元素應該在表中的那個空間中保存。

 

哈希表存放對象的時候,需要根據當前對象的特定計算對象在表中的存儲位置。任何對象都可以給集合中保存,那麼任何對象肯定可以給HashSet集合中保存。

任何對象在保存的時候,都需要計算存儲位置。任何對都應該具體計算存儲位置的功能,這個功能(方法)定義在Object類中。

我們給任何哈希表中存儲的對象,都會依賴這個對象的hashCode方法計算哈希值,通過哈希值確定對象在表中的存儲位置。

 

哈希衝突:如果兩個對象調用hahsCode方法之後得到的哈希值相同,稱為哈希衝突。

 

在給哈希中存放對象的時候,如果存儲哈希衝突,這時就會調用2個對象equals方法計算它們是否相同。如果相同,就丟棄當前正要存放的這個對象,如果不同就會繼續保存。

  1. HashSet存放自定義對象(必須書寫代碼測試,理解hashCode和equals方法作用)

自定義對象:不使用JDK中提供的類創建的對象,自己書寫一個,然後創建這個類的對象,最後將其保存在HashSet集合中。

 

/*

* 演示給HashSet中存放自定義對象

*/

public class HashSetDemo2 {

    public static void main(String[] args) {

        

        // 創建集合對象

        HashSet set = new HashSet();

        

        // 添加Person對象到集合中

        Person p = new Person("zhangsan",12);

        set.add(p);

        set.add(new Person("lisi",22));

        set.add(new Person("lisi",22));

        set.add(new Person("wangwu",29));

        set.add(new Person("zhaoliu",32));

        set.add(new Person("zhaoliu",32));

        set.add(new Person("tianqi",35));

        

        // 遍歷

        for( Iterator it = set.iterator(); it.hasNext() ; ){

            System.out.println(it.next());

        }

        

        

    }

}

 

 

/*

* 自定義類

*/

public class Person {

    private String name;

    private int age;

    // alt + shift + S

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java 中的 static 使用之靜態方法 Java 中的 static 使用之靜態方法 1、 靜態方法中可以直接調用同類中的靜態成員,但不能直接調用非靜態成員。如: 如果希望在靜態方法中調用非靜態變數,可以通過創建類的對象,然後通過對象來訪問非靜態變數。如: 2、 在普通成員方法中,則可以直接訪 ...
  • 知識點: 文件讀,寫操作,if 判斷, for 迴圈 salary = input("輸入你的工資:") bought_list = [] product_list = {} with open("product_list","r",encoding="utf-8") as f1: for item ...
  • Hibernate3 第二天 第一天回顧: 三個準備 創建資料庫 準備po和hbm文件 準備靈魂文件hibernate.cfg.xml 七個步驟 1 載入配置文件Configuration 2 創建會話工廠SessionFactory 3 獲取連接Session 4 開啟事務Transaction ... ...
  • 上篇我們學會瞭如何使用及定義變數。按照尿性,一般接下來就該學基本數據類型的運算了。 沒錯,本篇就仍是這麼俗套的來講講這無聊但又必學的基本數據類型的運算了。 基本數據類型運算 操作符 符號 | 語義 | 描述 | | + | 加 | 10+10,結果為20 | 減 | 10 3, 結果為7 | 乘 | ...
  • 一、python介紹 Python 的創始人為Guido van Rossum。Guido為了打發聖誕節的無趣,於1989年發明,在荷蘭國家數學和電腦科學研究所設計出來的(作為ABC 語言的一種繼承),之所以起名Python,是因他是Monty Python的喜劇團體的愛好者。Python第一個公 ...
  • php 中header 函數 我可能見多了,只要用來跳轉。今天在閱讀TP源碼的時候發現,header函數有第三個參數。有些困惑所以找到手冊查閱下,發現 瞬間就明白了第三個參數是用來指定,返回狀態碼的。 還有看到parse_str 函數 第二個參數傳遞了一個數組。有些困惑一查手冊發現 手冊說的很明白, ...
  • 頁面直接請求, Controller代碼 ...
  • 一.開發工具規範: 1. 開發工具經項目負責人調試後統一確定。 2. 開發工具一經確定不允許集成任何非統一插件,若有需要,經項目負責人同意後統一為 項目組成員添加。 3. 開發工具的編碼格式不允許修改。 二.排版規範: 1. 關鍵詞(或變數)和操作符之間加一個空格。 例如:int iCont = 1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...