容器

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

Paste_Image.png

1個(gè)圖,1個(gè)類,3個(gè)知識(shí)點(diǎn),6個(gè)接口.

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

Collection的方法舉例

import java.util.*; public class TestCollect { public static void main(String[] args) { Collection c = new ArrayList(); //ArrayList()相當(dāng)于是容器 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為添加.輸出這個(gè)c的時(shí)候,打印這個(gè)c的時(shí)候,相當(dāng)于調(diào)用了c.toString的方式.c.toString的輸出形式.首先[],然后挨個(gè)輸出盤里內(nèi)容,中間用逗號(hào)隔開. 以上的程序解決了表格的添加問(wèn)題,以及不斷重復(fù)的效率低下.

重寫equals

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

Paste_Image.png

Iterator接口

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

List接口算法

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

Comparable接口

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

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

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

衡量標(biāo)準(zhǔn):讀的效率和改的效率

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

MAP接口

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

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

  • 在合適的實(shí)際自動(dòng)打包,解包
    • 自動(dòng)將基礎(chǔ)類型轉(zhuǎn)換為對(duì)象
    • 自動(dòng)將對(duì)象轉(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以前類型不明確;

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

解決辦法:

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

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

總結(jié)1136

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

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

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

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