第十七天

来源: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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...