国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

JAVA,Map接口,迭代器Iterator

2019-11-14 15:17:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1.    Map 接口概述

java.util.Map 接口描述了映射結(jié)構(gòu), Map 接口允許以鍵集、值集合或鍵 - 值映射關(guān)系集的形式查看某個(gè)映射的內(nèi)容。

Java 自帶了各種 Map 類(lèi)。 這些 Map 類(lèi)可歸為三種類(lèi)型:

   1. 通用 Map ,用于在應(yīng)用程序中管理映射,通常在 java.util 程序包中實(shí)現(xiàn)

          * HashMap

          * Hashtable

          * PRoperties

           * LinkedHashMap

          * IdentityHashMap

          * TreeMap

          * WeakHashMap

          * ConcurrentHashMap

   2. 專用 Map ,您通常不必親自創(chuàng)建此類(lèi) Map ,而是通過(guò)某些其他類(lèi)對(duì)其進(jìn)行訪問(wèn)

          * java.util.jar.Attributes

          * javax.print.attribute.standard.PrinterStateReasons

          * java.security.Provider

          * java.awt.RenderingHints

          * javax.swing.UIDefaults

   3. 一個(gè)用于幫助實(shí)現(xiàn)您自己的 Map 類(lèi)的抽象類(lèi)

          * AbstractMap

 

接口中的重要方法如下:

1,  覆蓋的方法

equals(Object o)               // 比較指定對(duì)象與此 Map 的等價(jià)性

hashCode()                     // 返回此 Map 的哈希碼

 

2,  Map 更新方法,可以更改 Map 的內(nèi)容。

put(Object key, Object value)  // 添加鍵值對(duì),若鍵已存在,則覆蓋舊值。

putAll(Map t)               // 將指定 Map 中的所有映射復(fù)制到此 map

remove(Object key)             // 從 Map 中刪除與 key 關(guān)聯(lián)的 value

clear()                       // 從 Map 中刪除所有映射

 

3,  返回視圖的 Map 方法:使用這些方法返回的對(duì)象,你可以遍歷和刪除 Map 的元素。

Set keySet()                // 返回 Map 中所包含鍵的 Set 視圖。

// 刪除 Set 中的 key 元素還將刪除 Map 中相應(yīng)的映射(鍵和值)

Collection values()         // 返回 map 中所包含值的 Collection 視圖。

// 刪除 Collection 中的 value 元素還將刪除 Map 中相應(yīng)的映射(鍵和值)

Set entrySet()             // 返回 Map 中所包含映射的 Set 視圖(鍵值對(duì))。

Set 中的每個(gè)元素都是一個(gè) Map.Entry 對(duì)象,可以使用 getKey() 和 getValue() 方法(還有一個(gè) setValue() 方法)訪問(wèn) Map.Entry 對(duì)象的鍵元素和值元素

 

關(guān)于 Map.Entry 接口

Map 的 entrySet() 方法返回一個(gè)實(shí)現(xiàn) Map.Entry 接口的對(duì)象集合。集合中每個(gè)對(duì)象都是底層 Map 中一個(gè)特定的鍵 / 值對(duì)。通過(guò)這個(gè)集合的迭代器,您可以獲得每一個(gè)條目 ( 唯一獲取方式 ) 的鍵或值并對(duì)值進(jìn)行更改。

(1) Object getKey(): 返回條目的關(guān)鍵字

   (2) Object getValue(): 返回條目的值

   (3) Object setValue(Object value): 將相關(guān)映像中的值改為 value ,并且返回舊值

當(dāng)條目通過(guò)迭代器返回后,除非是迭代器自身的 remove() 方法或者迭代器返回的條目的 setValue() 方法,其余對(duì)源 Map 外部的修改都會(huì)導(dǎo)致此條目集變得無(wú)效,同時(shí)產(chǎn)生條目行為未定義。

 

4,  Map 訪問(wèn)和測(cè)試方法:這些方法檢索有關(guān) Map 內(nèi)容的信息但不更改 Map 內(nèi)容。

get(Object key)             // 返回與指定鍵關(guān)聯(lián)的值 及此對(duì)象,若無(wú),返回 null 。

boolean containsKey(Object key)     // 如果 Map 包含指定鍵的映射,則返回 true

boolean containsValue(Object value)  // 若此 Map 將一個(gè)或多個(gè)鍵映射到指定值,返回 true

isEmpty()                // 如果 Map 不包含鍵 - 值映射,則返回 true

int size()                  // 返回 Map 中的鍵 - 值映射的數(shù)目

 

 

幾乎所有通用 Map 都使用哈希映射。 這是一種將元素映射到數(shù)組的非常簡(jiǎn)單的機(jī)制,您應(yīng)了解哈希映射的工作原理,以便充分利用 Map 。

哈希映射結(jié)構(gòu)由一個(gè)存儲(chǔ)元素的內(nèi)部數(shù)組組成。 由于內(nèi)部采用數(shù)組存儲(chǔ),因此必然存在一個(gè)用于確定任意鍵訪問(wèn)數(shù)組的索引機(jī)制。 實(shí)際上,該機(jī)制需要提供一個(gè)小于數(shù)組大小的整數(shù)索引值(即余數(shù))。 該機(jī)制稱作哈希函數(shù)。 在 Java 基于哈希的 Map 中,哈希函數(shù)將對(duì)象轉(zhuǎn)換為一個(gè)適合內(nèi)部數(shù)組的整數(shù)。您不必為尋找一個(gè)易于使用的哈希函數(shù)而大傷腦筋: 每個(gè)對(duì)象都包含一個(gè)返回整數(shù)值的 hashCode() 方法。 要將該值映射到數(shù)組,只需將其轉(zhuǎn)換為一個(gè)正值,然后在將該值除以數(shù)組大小后取余數(shù)即可。

哈希函數(shù)將任意對(duì)象映射到一個(gè)數(shù)組位置,但如果兩個(gè)不同的鍵映射到相同的位置,情況將會(huì)如何? 這是一種必然發(fā)生的情況。 在哈希映射的術(shù)語(yǔ)中,這稱作沖突。 Map 處理這些沖突的方法是在索引位置處插入一個(gè)鏈接列表,并簡(jiǎn)單地將元素添加到此鏈接列表。

 

圖示:

  



迭代器(Iterator)

  迭代器是一種設(shè)計(jì)模式,它是一個(gè)對(duì)象,它可以遍歷并選擇序列中的對(duì)象,而開(kāi)發(fā)人員不需要了解該序列的底層結(jié)構(gòu)。迭代器通常被稱為“輕量級(jí)”對(duì)象,因?yàn)閯?chuàng)建它的代價(jià)小。

  Java中的Iterator功能比較簡(jiǎn)單,并且只能單向移動(dòng):

  (1) 使用方法iterator()要求容器返回一個(gè)Iterator。第一次調(diào)用Iterator的next()方法時(shí),它返回序列的第一個(gè)元素。注意:iterator()方法是java.lang.Iterable接口,被Collection繼承。

  (2) 使用next()獲得序列中的下一個(gè)元素。

  (3) 使用hasNext()檢查序列中是否還有元素。

  (4) 使用remove()將迭代器新返回的元素刪除。

  Iterator是Java迭代器最簡(jiǎn)單的實(shí)現(xiàn),為L(zhǎng)ist設(shè)計(jì)的ListIterator具有更多的功能,它可以從兩個(gè)方向遍歷List,也可以從List中插入和刪除元素。

  

 

  List接口有一個(gè)特有的方法,listIterator

   使用Iterator迭代器缺點(diǎn)

 

    1. ListIteratoradd()方法,可以向List中添加對(duì)象,而Iterator不能

  2. ListIteratorIterator都有hasNext()next()方法,可以實(shí)現(xiàn)順序向后遍歷,但是ListIteratorhasprevious()previous()方法,可以實(shí)現(xiàn)逆向(順序向前)遍歷。Iterator就不可以。

  3. ListIterator可以定位當(dāng)前的索引位置,nextIndex()previousIndex()可以實(shí)現(xiàn)。Iterator沒(méi)有此功能。

  4. 都可實(shí)現(xiàn)刪除對(duì)象,但是ListIterator可以實(shí)現(xiàn)對(duì)象的修改,set()方法可以實(shí)現(xiàn)。Iierator僅能遍歷,不能修改。

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 应城市| 萨嘎县| 晋江市| 小金县| 双江| 稻城县| 鄂托克旗| 嘉峪关市| 阳春市| 静宁县| 桓台县| 永寿县| 洛川县| 余干县| 云龙县| 德阳市| 湟源县| 克拉玛依市| 本溪| 玉山县| 祁东县| 利津县| 柯坪县| 万荣县| 古丈县| 溧水县| 洞口县| 信丰县| 伊吾县| 屏山县| 高阳县| 武山县| 西贡区| 岱山县| 廉江市| 景泰县| 修文县| 都兰县| 班戈县| 浙江省| 黄浦区|