最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Map接口使用以及有關(guān)集合的面試知識點匯總

 更新時間:2022年07月26日 11:48:18   作者:微涼秋意  
在java面試過程中,Map時常會被作為一個面試點來問,下面這篇文章主要給大家介紹了關(guān)于Java中Map接口使用以及有關(guān)集合的面試知識點匯總的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

Map接口

存儲特點

  • 以鍵(key)值(value)對的形式存儲
  • 鍵無序、無下標(biāo)、元素不可重復(fù)
  • 值無序、無下標(biāo)、元素可以重復(fù)

常用實現(xiàn)類

  1. HashMap
    JDK1.2 底層哈希表實現(xiàn) 線程不安全,效率高
  2. LinkedHashMap
    JDK1.2 是HashMap的子類,底層哈希表實現(xiàn) 線程不安全,效率高
  3. TreeMap
    JDK1.2 是SortedMap的實現(xiàn)類,底層紅黑樹實現(xiàn) 線程不安全,效率高
  4. HashTable
    JDK1.0 底層哈希表實現(xiàn) 線程安全,效率低
  5. Properties
    JDK1.0 是HashTable的子類,底層哈希表實現(xiàn) 線程安全,效率低

創(chuàng)建方法

  • 使用多態(tài)

Map<鍵的泛型,值的泛型> 集合名=new 實現(xiàn)類名<鍵的泛型,值的泛型>();

tips:一個鍵值對才是一個元素

常用方法

  1. 值 put(鍵,值):將一個鍵值對添加至集合末尾
    如果鍵已經(jīng)存在,則進(jìn)行值的替換
  2. void clear():清空集合元素
  3. boolean containsKey(鍵):判斷集合中是否存在某個鍵
  4. boolean containsValue(值):判斷集合中是否存在某個值
  5. 值 get(鍵):獲取鍵對應(yīng)的值
  6. boolean isEmpty():判斷集合內(nèi)容是否為空,不能判比null值
  7. void putAll(Map的集合名):將指定Map集合的內(nèi)容添加至當(dāng)前集合末尾
  8. 值 remove(鍵):移除鍵所對應(yīng)的鍵值對
  9. int size():獲取集合鍵值對的個數(shù)

代碼舉例:

public class Test {
    public static void main(String[] args) {
        //數(shù)字-String   1 - 一   1 - yi
        Map<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "一");
        map.put(111, "yiyiyi");
        map.put(666, "liuliuliu");
        map.put(111, "一一一");

        System.out.println(map.containsKey(678));//f
        System.out.println(map.containsValue("yiyiyi"));//t

        System.out.println(map.get(111));

        map.remove(666);
        System.out.println(map.get(666));

        System.out.println(map.size());//2
    }
}

遍歷方法

1、keySet()+get()

  • 先獲取所有的鍵,再遍歷鍵得到所有的值
  • Set<鍵的泛型> keySet():獲取所有的鍵存于Set集合并返回
        //獲取所有鍵
        Set<鍵的泛型> set=集合名.keySet();
        //遍歷所有鍵
        set.forEach(
            o-> 
            //o就代表當(dāng)前正在被遍歷的鍵
            //通過集合名.get(o)可以得到對應(yīng)的值
        );
如:
		Map<Integer, String> map = new HashMap<>();
        map.put(123, "yiersan");
        map.put(234, "ersansi");
        map.put(456, "siwuliu");
        map.put(999, "jiujiujiu");
        Set<Integer> set=map.keySet();
        set.forEach(o-> System.out.println("鍵:"+o+",值:"+map.get(o)));

2、values()

  • 直接獲取所有的值
  • Collection<值的泛型> values():獲取所有的值存于Collection集合并返回
Collection<值的泛型> coll = 集合名.values();
coll.forEach(v-> v就代表當(dāng)前的值);
如:
		Collection<String> coll = map.values();
        coll.forEach(v-> System.out.println(v));

3、entrySet()

  • 獲取鍵值對對象進(jìn)行遍歷
  • Set< Map.Entry<鍵的泛型,值的泛型> > entrySet():獲取所有的鍵值對對象存于Set集合并返回
  • Set< Map.Entry<鍵的泛型,值的泛型> > 等同于 Set<鍵值對對象>
  • getKey():獲取Entry對象中的鍵
  • getValue():獲取Entry對象中的值
        //獲取鍵值對對象集合
        Set<Map.Entry<鍵的泛型,值的泛型>> set2=集合名.entrySet();
        for (Map.Entry entry : set2) {
            //通過entry.getKey()獲取鍵
            //通過entry.getValue()獲取值
        }
如:
        Set<Map.Entry<鍵的泛型,值的泛型>> set2=集合名.entrySet();
        for (Map.Entry entry : set2) {
            System.out.println("鍵:"+entry.getKey()+",值:"+entry.getValue())
        }
        System.out.println("lambda自遍歷:");
        set2.forEach(entry-> System.out.println("鍵:"+entry.getKey()+",值:"+entry.getValue()));

4、自遍歷forEach

JDK8.0

        集合名.forEach(new BiConsumer<鍵的泛型, 值的泛型>() {
            @Override
            public void accept(鍵的泛型 i, 值的泛型 s) {
                //i代表鍵
                //s代表值
            }
        });
        System.out.println("lambda簡化自遍歷:");
        map.forEach((k,v)-> k代表鍵,v代表值);

如:
		map.forEach(new BiConsumer<Integer, String>() {
            @Override
            public void accept(Integer i, String s) {
                System.out.println("鍵:"+i+",值:"+s);
            }
        });
        System.out.println("lambda簡化自遍歷:");
        map.forEach((k,v)-> System.out.println("鍵:"+k+",值:"+v));

不同實現(xiàn)類的使用

  • HashMap可以存放null值,鍵可以存放0-1個null,值可以存放0-n個null
  • LinkedHashMap可以保證存入取出順序一致
  • TreeMap可以根據(jù)鍵進(jìn)行默認(rèn)的升序排序
    • 不能對null進(jìn)行默認(rèn)排序
    • 如果鍵為自定義類型,則必須設(shè)置排序規(guī)則,方式與TreeSet一致
  • HashTable不能存放null值
  • Properties鍵和值必須為String類型
    • 創(chuàng)建不建議使用多態(tài)
    • 不能聲明泛型

集合面試知識點補(bǔ)充

  1. Set是一個只有鍵,沒有值的Map集合
  2. 底層數(shù)組長度為16
  3. 數(shù)組加載因子為75%,當(dāng)數(shù)組位使用到達(dá)75%時,會以平衡二叉樹的方式進(jìn)行數(shù)組擴(kuò)容,擴(kuò)容長度為原長度*2,擴(kuò)容出來的每個數(shù)組長度都為16
  4. 為什么Set或者M(jìn)ap在存放數(shù)值的時候,是從小到大的?
    當(dāng)存放數(shù)值過小時,整數(shù)值本身就是它的存放下標(biāo),下標(biāo)從小到大,所以值的存放也是從小到大
  5. 紅黑樹使用的是二分查找法,特點為查詢效率快
  6. 紅黑樹:以哈希碼值為判斷標(biāo)準(zhǔn),哈希碼值比當(dāng)前元素大,往右側(cè)存儲,哈希碼值比當(dāng)前元素小,往左側(cè)存儲
  7. 二分查找法:特點為一次鎖定數(shù)據(jù)的一半
  8. 當(dāng)哈希表的數(shù)組中某個鏈表長度達(dá)到了8時,會重組鏈表元素,開啟紅黑樹

補(bǔ)充:Java Map集合面試題匯總

1、 你都知道哪些常用的Map集合?

HashMap、HashTable、LinkedHashMap、ConcurrentHashMap。

2、Collection集合接口和Map接口有什么關(guān)系?

沒關(guān)系,Collection是List、Set父接口不是Map父接口。

3、HashMap是線程安全的嗎?線程安全的Map都有哪些?性能最好的是哪個?

HashMap不是線程安全的。線程安全的有HashTable、ConcurrentHashMap、SynchronizedMap,性能最好的是ConcurrentHashMap。

4、使用HashMap有什么性能問題嗎?

使用HashMap要注意避免集合的擴(kuò)容,它會很耗性能,根據(jù)元素的數(shù)量給它一個初始大小的值。

5、HashMap的數(shù)據(jù)結(jié)構(gòu)是怎樣的?默認(rèn)大小是多少?內(nèi)部是怎么擴(kuò)容的?

HashMap是數(shù)組和鏈表組成的,默認(rèn)大小為16,當(dāng)hashmap中的元素個數(shù)超過數(shù)組大小*loadFactor(默認(rèn)值為0.75)時就會把數(shù)組的大小擴(kuò)展為原來的兩倍大小,然后重新計算每個元素在數(shù)組中的位置。

6、怎么按添加順序存儲元素?怎么按A-Z自然順序存儲元素?怎么自定義排序?

按添加順序使用LinkedHashMap,按自然順序使用TreeMap,自定義排序TreeMap(Comparetor c)。

7、HashMap的鏈表結(jié)構(gòu)設(shè)計是用來解決什么問題的?

HashMap的鏈表結(jié)構(gòu)設(shè)計是用來解決key的hash沖突問題的。

8、HashMap的鍵、值可以為NULL嗎?HashTable呢?

HashMap的鍵值都可以為NULL,HashTable不行。

9、HashMap使用對象作為key,如果hashcode相同會怎么處理?

key的hash沖突,如果key equals一致將會覆蓋值,不一致就會將值存儲在key對應(yīng)的鏈表中。

10、HashMap中的get操作是什么原理?

先根據(jù)key的hashcode值找到對應(yīng)的鏈表,再循環(huán)鏈表,根據(jù)key的hash是否相同且key的==或者equals比較操作找到對應(yīng)的值。

結(jié)語

到此這篇關(guān)于Java中Map接口使用以及有關(guān)集合的面試知識點匯總的文章就介紹到這了,更多相關(guān)Java中Map接口使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java編程中super關(guān)鍵字的用法

    詳解Java編程中super關(guān)鍵字的用法

    這篇文章主要介紹了Java編程中this與super關(guān)鍵字的用法,包括從內(nèi)存結(jié)構(gòu)方面分析super的作用域,需要的朋友可以參考下
    2015-10-10
  • 解讀@Scheduled任務(wù)調(diào)度/定時任務(wù)非分布式

    解讀@Scheduled任務(wù)調(diào)度/定時任務(wù)非分布式

    這篇文章主要介紹了解讀@Scheduled任務(wù)調(diào)度/定時任務(wù)非分布式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring中的IOC深度解讀

    Spring中的IOC深度解讀

    這篇文章主要介紹了Spring中的IOC深度解讀,spring容器會創(chuàng)建和組裝好清單中的對象,然后將這些對象存放在spring容器中,當(dāng)程序中需要使用的時候,可以到容器中查找獲取,然后直接使用,需要的朋友可以參考下
    2023-09-09
  • Java8函數(shù)式接口Predicate用法示例詳解

    Java8函數(shù)式接口Predicate用法示例詳解

    這篇文章主要為大家介紹了Java8函數(shù)式接口Predicate用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java?超詳細(xì)講解十大排序算法面試無憂

    Java?超詳細(xì)講解十大排序算法面試無憂

    這篇文章主要介紹了Java常用的排序算法及代碼實現(xiàn),在Java開發(fā)中,對排序的應(yīng)用需要熟練的掌握,這樣才能夠確保Java學(xué)習(xí)時候能夠有扎實的基礎(chǔ)能力。那Java有哪些排序算法呢?本文小編就來詳細(xì)說說Java常見的排序算法,需要的朋友可以參考一下
    2022-04-04
  • springboot2版本無法加載靜態(tài)資源問題解決

    springboot2版本無法加載靜態(tài)資源問題解決

    這篇文章主要介紹了springboot2版本無法加載靜態(tài)資源問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 23種設(shè)計模式(20)java中介者模式

    23種設(shè)計模式(20)java中介者模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計模式之java中介者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 深入了解Java SpringBoot自動裝配原理

    深入了解Java SpringBoot自動裝配原理

    在使用springboot時,很多配置我們都沒有做,都是springboot在幫我們完成,這很大一部分歸功于springboot自動裝配。本文將詳細(xì)為大家講解SpringBoot的自動裝配原理,需要的可以參考一下
    2022-03-03
  • 一次因Java應(yīng)用造成CPU過高的排查實踐過程

    一次因Java應(yīng)用造成CPU過高的排查實踐過程

    一個應(yīng)用占用CPU很高,除了確實是計算密集型應(yīng)用之外,通常原因都是出現(xiàn)了死循環(huán)。下面這篇文章主要給大家介紹了一次因Java應(yīng)用造成CPU過高的排查實踐過程,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-11-11
  • Struts2實現(xiàn)上傳單個文件功能

    Struts2實現(xiàn)上傳單個文件功能

    這篇文章主要為大家詳細(xì)介紹了Struts2實現(xiàn)上傳單個文件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評論

阳信县| 黄梅县| 鹤壁市| 宾阳县| 永州市| 庆云县| 集贤县| 阿克| 伊宁市| 商南县| 玉林市| 北海市| 黄陵县| 自贡市| 临泉县| 镇坪县| 平原县| 交口县| 邓州市| 孟村| 错那县| 东阳市| 富宁县| 海安县| 万源市| 冷水江市| 巴里| 龙山县| 共和县| 武城县| 新田县| 百色市| 巴林右旗| 扶绥县| 曲靖市| 额敏县| 武川县| 丹阳市| 济阳县| 临邑县| 永修县|