java初學集合

來源:互聯網
上載者:User

標籤:

最近在培訓班的進度比較快,這段時間學習了集合、異常、檔案、和網路4個方面的內容。都比較淺顯,屬於基本用法,主要是總結一下,為以後深入學習打下基礎。

 

集合:

按照我目前的理解水平。集合是重要的資料結構類型,使用集合可以將資料集中起來,方便管理。這種管理主要是指:增加,刪除,查詢,修改,插入。

集合有兩大家族:collection和map家族:他們的關係如下:

其中第一張圖是collection圖,描述的是collection主要成員。collection有兩個主要成員,set(介面)、list(介面),繼承set的類內部資料存放區都是無序的,繼承list介面的類內部資料都是有序列的。list及其繼承類是有序的,類似數組,list於數組的區別是,數組定長的,而list是不定長的,list繼承了collection,collection資料有增、刪、查、改,分別是方法add、remove、get、set,常用的子類是Arrylist類。set的資料結構是無序的,set按照資料是否相等儲存,後面的資料覆蓋前面的資料。無須結構的資料遍曆可以使用標準迭代器或者foreach迴圈來實現,set下面主要使用的類是hashset。

第二張圖是map介面及其子類。map內的資料結構是索引值對(key-value)的結構。鍵是不可以重複的,儲存的索引值有點像set結構,map內的資料結構也是無序的。取map內的資料有點麻煩,因為map的資料是一對一對出現的,取map資料要先將key值轉化為set結構,然後通過key值讀取map內的資料。這種方式就是第三章圖所繪畫的,map隱隱的連著collection,collection隱隱的連著interater(迭代器)。

這裡需要指出的一個初學者可能犯的錯誤是:集合只是將一堆資料儲存起來以方便管理,它並沒有產生新的資料。這話的意思是我們僅僅建立了一個對象,不斷的修改這個對象,並將修改後的對象添加到集合中,結果是所有集合內的資料都是一樣的,都是我們最後修改的那個。例子代碼如下:

import java.util.List;import java.util.ArrayList;public class T002 {    public static void main(String[] args) {        Student std1 = new Student();        std1.set("a", 20, false);        List list = new ArrayList();        list.add(std1);//下面注釋掉的代碼是正確添加元素的代碼        // std1 = new Student();//Student的set方法沒有重新建立對象,僅僅是修改了std1的值,其實是僅僅建立一個對象            std1.set("b", 21, true);        list.add(std1);        for (Object o : list) {            System.out.println((Student) o);        }    }}//寫在一個檔案中,其他外類不能帶有publicclass Student {    public String name;    public int age;    boolean sex;//建一個設定值的方法方便設定值    public void set(String name, int age, boolean sex){        this.name = name;        this.age = age;        this.sex = sex;    }//重寫列印方法,方便列印    @Override    public String toString() {        return "My name is "+name+",I am "+age+" years old"+",I am a "+(sex?"man":"girl");    }}

上面這段代碼列印出來的是兩行(list中有兩個元素嘛),但是輸出的結果卻是一樣,跟我們預想的不一樣。這裡就是上面說的,集合并不建立對象|資料,它僅僅是管理對象|資料,不要妄想集合幫你建立新的對象。

在集合中還有一個需要注意的是就是集合繼承object中的equal方法,在實際項目中常常需要我們重寫。那麼這是就根據我們的需求重寫,這個每個人根據自己的需求設計。有點要指出,當我們重寫equals方法的時候,還必須要重寫Object的另一個方法:hashcode()。equals方法並直接需要hashcode的支援,但是hashcode對於對象在今後的查詢等操作時意義巨大,所以在JDK文檔中有這樣兩句話:equals “注意:當此方法被重寫時,通常有必要重寫 hashCode 方法,以維護 hashCode 方法的常規協定,該協定聲明相等對象必須具有相等的雜湊碼。”,hashcode:“如果根據 equals(Object) 方法,兩個對象是相等的,那麼對這兩個對象中的每個對象調用 hashCode 方法都必鬚生成相同的整數結果。 ”就是說當設計者的意圖是當hashcode不同時,equals也一定不同,這樣就提高了程式的效率。這個是一個約定,兩者病沒有死的關聯,但是大家都認為hash不同,這兩個對象一定不相等,所以在修改equals也必須修改hashcode。比如下面兩個hash不同,但是他們是equal的:

class Exemple {    public void show(){        System.out.println("Hello world!");    }    @Override    public boolean equals(Object obj) {        // TODO Auto-generated method stub        return true;    }        @Override    public int hashCode() {        // TODO Auto-generated method stub        return super.hashCode();    }}public class T002{    public static void main(String[] args) {        Exemple E=new Exemple();        Exemple e=new Exemple();        System.out.println(E.hashCode());        System.out.println(e.hashCode());        System.out.println(E.equals(e));    }}

java初學集合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.