容器

J2SDK所提供的容器API位于java.util包內(nèi)
容器API的類圖和結(jié)構(gòu)如下圖所示:

Paste_Image.png

1個圖,1個類,3個知識點,6個接口.

  • Collection 接口定義了存取一組對象的方法,Set和List分別定義了存儲方式
    • set中的數(shù)據(jù)對象沒有順序且不可重復.
    • List中的數(shù)據(jù)對象有順序且可以重復.
  • Map接口定義了存儲"鍵(key)--值(value)映射對"的方法

Collection的方法舉例

import java.util.*; public class TestCollect { public static void main(String[] args) { Collection c = new ArrayList(); //ArrayList()相當于是容器 c.add("hello"); c.add(new Name("f1","l1"));//添加,remove為刪除,原理為先去equals,如果true那么,則去除掉add內(nèi)容 c.add(new Integer(100)); System.out.println(c.size()); System.out.println(c); } } class Name { public String firstName,lastName; public Name(String firstName,String lastName){ this.firstName = firstName; this.lastName = lastName; } public String getfirstName(){ return firstName; } public String getlastName(){ return lastName; } public String toString() { return firstName + " " + lastName; //重寫輸出類型. } }
//add為添加.輸出這個c的時候,打印這個c的時候,相當于調(diào)用了c.toString的方式.c.toString的輸出形式.首先[],然后挨個輸出盤里內(nèi)容,中間用逗號隔開. 以上的程序解決了表格的添加問題,以及不斷重復的效率低下.

重寫equals

如果要重寫equals這個方法的話,必須重寫這個hashcode()索引方法..

Paste_Image.png

Iterator接口

  • 所有實現(xiàn)了Collection接口的容器類都有一個iterator方法用以返回一個實現(xiàn)了Iterator接口的對象
  • Interator對象稱作迭代器,用以方便的實現(xiàn)對容器內(nèi)元素的遍歷操作
  • Interator接口實現(xiàn)了如下方法;
    • boolean hasNext;//判斷右邊是否有元素
    • Object next(); //返回游標右邊的元素并將游標移動到下一位置(substring)
    • void remove //刪除游標左邊的元素,在執(zhí)行完next之后該操作只能執(zhí)行一次

List接口算法

  • java.util.Collections.提供了一些靜態(tài)方法實現(xiàn)基于List容器的常用算法
    • void sort(List) 對List容器內(nèi)的對象進行排序
    • void shuffle(List) 對List容器內(nèi)的對象進行隨機排列
    • void reverse(List) 對List容器內(nèi)的對象進行逆序排列
    • void fill(List,object) 用一個特定的對象重寫整個List容器
    • void copy(List dest,List src)將src容器內(nèi)的內(nèi)容拷貝到dest容器
    • int binarySearch(List,Objcet)對于順序的List容器,采用折半查找的方法查找特定對象.

Comparable接口

  • 比較以上接口排序的時候需要怎樣的判定容器中的對象大小.
  • 所有可以排序的類都實現(xiàn)了java.lang.Comparable接口,Comparable接口只有一個方法,
    public int comparabTo(object boj);
  • 該方法
    • 返回值為0,表示this = obj;
    • 返回正數(shù)表示this > obj;
    • 返回負數(shù)表示this < obj;

實現(xiàn)了comparable 接口的類通過實現(xiàn)comparaTo方法從而確定該類對象的排序方式.

如何選擇數(shù)據(jù)結(jié)構(gòu)

衡量標準:讀的效率和改的效率

  • Array讀快改慢
  • Linked改快讀慢
  • Hash兩者之間

MAP接口

  • 實現(xiàn)MAP接口的類用來存儲鍵--值 對.(key為索引)
  • MAP接口的實現(xiàn)類有HashMap和TreeMap等.
  • Map類中存儲的鍵--之對通過建來標識,所以鍵值不能重復(依然為equals方法,但是比較equals的方法很慢,所以直接比較Hashcode因為為int類型.).
    object put(Object key,Object value);//這個key和對應(yīng)的value
    Object get(Object key);//這個key對應(yīng)的value
    Object remove(Objcet key);//刪除這個key和對應(yīng)的value
    boolean containsKey(Object key);//是否包含這個key
    boolean containsValue(Object value);//是否包含這個value
    int siza();//一共多少對
    boolean isEmpty();
    void putAll(Map t);//把t的key全部放到里面.
    void clear();
    //以上內(nèi)容,在1.5版本以前需要將例如1的值,強行轉(zhuǎn)換成Integer然后才能輸入進去,而1.5之后,我們可以將1打包,輸入進去.自動完成打包,解包.減少我們的代碼數(shù)量
    例如m1.put("one",new Integer(1));
    現(xiàn)在為m1.put("one,1);自動將1打包成一個

JDK1.5之后新增加的東西,Auto-boxing/unboxing

  • 在合適的實際自動打包,解包
    • 自動將基礎(chǔ)類型轉(zhuǎn)換為對象
    • 自動將對象轉(zhuǎn)換為基礎(chǔ)類型
      import java.util.* public class TestArgewords{ private static final Integer One = new Integer(1); public static void main(String args[]) { Map m =new HashMap(); for(int i = 0;i <args.length;i++) { Integer freq = (Integer)m.get(args[i]); m.put{args[i],(freq == null? One : new Integer(freq.intValue() + 1))}; } System.out.println {m.size() + " "); System.out.println(m) } }

泛型

JDK1.4以前類型不明確;

  • 裝入集合的類型都被當做Objcet對待,從而失去本身的實際類型
  • 從集合中取出時往往需要轉(zhuǎn)型,效率低,容易出錯

解決辦法:

  • 在定義集合的時候同時定義集合中對象的類型
  • 示例:BasicGeneric.java
    • 可以在定義Collcetion的時候指定
    • 也可以在循環(huán)時用Iterator指定

好處:增強程序的可讀性和穩(wěn)定性.

總結(jié)1136

  • 一個圖.
  • 一個類
    • Collections
  • 三個知識點
  • for
  • Generic泛型
  • Auto-boxing/unboxing自動打包,解包
  • 六個接口
    • Collection接口
    • Set List接口
    • Map接口
    • iterator接口(用數(shù)組模擬鏈條方法圖記憶)
    • Comparable(定義一個類的兩個對象誰大誰小).
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 3.3 集合 一方面, 面向?qū)ο笳Z言對事物的體現(xiàn)都是以對象的形式,為了方便對多個對象的操作,就要對對象進行存儲。另...
    閆子揚閱讀 835評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,623評論 18 399
  • 喜歡是給他珍惜,溫柔是放他自由。 【1】 自從過了27歲生日,本來還算開明的父母也開始有意無意的詢問起我最...
    春水枕寒流閱讀 732評論 0 2
  • 這幾天到處跑,從馬鞍山到南京,起早貪黑,遷戶口、辦貸款、看房子.....,身心疲憊,也就沒控制食欲了,胡吃海塞...
    探索未知閱讀 680評論 0 0

友情鏈接更多精彩內(nèi)容