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

新手初學(xué)Java-Map

 更新時(shí)間:2021年07月07日 15:58:26   作者:N0lan  
Map簡介:將鍵映射到值的對象。一個(gè)映射不能包含重復(fù)的鍵;每個(gè)鍵最多只能映射到一個(gè)值。此接口取代 Dictionary 類,后者完全是一個(gè)抽象類,而不是一個(gè)接口

Map

Map是一種依照鍵(key)存儲元素的容器,鍵(key)很像下標(biāo),在List中下標(biāo)是整數(shù)。在Map中鍵(key)可以使任意類型的對象。Map中不能有重復(fù)的鍵(Key),每個(gè)鍵(key)都有一個(gè)對應(yīng)的值(value)。

一個(gè)鍵(key)和它對應(yīng)的值構(gòu)成map集合中的一個(gè)元素。

Map中的元素是兩個(gè)對象,一個(gè)對象作為鍵,一個(gè)對象作為值。鍵不可以重復(fù),但是值可以重復(fù)。

看頂層共性方法找子類特有對象.

Map與Collection在集合框架中屬并列存在

Map存儲的是鍵值對

Map存儲元素使用put方法,Collection使用add方法

Map集合沒有直接取出元素的方法,而是先轉(zhuǎn)成Set集合,在通過迭代獲取元素

Map集合中鍵要保證唯一性

也就是Collection是單列集合, Map 是雙列集合。

學(xué)習(xí)體系

Map學(xué)習(xí)體系:
 ---| Map  接口    將鍵映射到值的對象。一個(gè)映射不能包含重復(fù)的鍵;每個(gè)鍵最多只能映射到一個(gè)值。
            ---| HashMap  采用哈希表實(shí)現(xiàn),所以無序
            ---| TreeMap   可以對健進(jìn)行排序
---|Hashtable:
底層是哈希表數(shù)據(jù)結(jié)構(gòu),線程是同步的,不可以存入null鍵,null值。
效率較低,被HashMap 替代。
---|HashMap:
底層是哈希表數(shù)據(jù)結(jié)構(gòu),線程是不同步的,可以存入null鍵,null值。
要保證鍵的唯一性,需要覆蓋hashCode方法,和equals方法。
---| LinkedHashMap:
該子類基于哈希表又融入了鏈表。可以Map集合進(jìn)行增刪提高效率。
---|TreeMap:
底層是二叉樹數(shù)據(jù)結(jié)構(gòu)??梢詫ap集合中的鍵進(jìn)行排序。需要使用Comparable或者Comparator 進(jìn)行比較排序。return 0,來判斷鍵的唯一性。

常見方法

1、添加:
    1、V put(K key, V value)    (可以相同的key值,但是添加的value值會覆
蓋前面的,返回值是前一個(gè),如果沒有就返回null)                                         
    2、putAll(Map<? extends K,? extends V> m)  從指定映射中將所有映射關(guān)
系復(fù)制到此映射中(可選操作)。
2、刪除
    1、remove()    刪除關(guān)聯(lián)對象,指定key對象
    2、clear()     清空集合對象
3、獲取
     1:value get(key); 可以用于判斷鍵是否存在的情況。當(dāng)指定的鍵不存在的時(shí)候,返
回的是null。
3、判斷:
    1、boolean isEmpty()   長度為0返回true否則false
    2、boolean containsKey(Object key)  判斷集合中是否包含指定的key
3、boolean containsValue(Object value)  判斷集合中是否包含指定的value
4、長度:
Int size()

Map的操作

這里使用hashMap

map增刪查

import java.util.HashMap;
import java.util.Map;
public class Maps {
    public static void main(String[] args){
        Map<String,String> myMap=new HashMap<String,String>();
        myMap.put("N0lan","tryup");
        myMap.put("Cors","study");//add
        System.out.println(myMap);
        myMap.remove("N0lan");//delete
        System.out.println(myMap.get("Cors"));//find
        System.out.println(myMap.isEmpty());//panduan
        System.out.println(myMap.containsKey("Hello"));//
    }
}

map的遍歷

keySet遍歷

將Map轉(zhuǎn)成Set集合(keySet()),通過Set的迭代器取出Set集合中的每一個(gè)元素(Iterator)就是Map集合中的所有的鍵,再通過get方法獲取鍵對應(yīng)的值。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Maps {
    public static void main(String[] args){
       /* Map<String,String> myMap=new HashMap<String,String>();
        myMap.put("N0lan","tryup");
        myMap.put("Cors","study");//add
        System.out.println(myMap);
        myMap.remove("N0lan");//delete
        System.out.println(myMap.get("Cors"));//find
        System.out.println(myMap.isEmpty());//panduan
        System.out.println(myMap.containsKey("Hello"));//*/
        Bianli();
    }
    public static void Bianli(){
        Map<String,String> myMap=new HashMap<String,String>();
        myMap.put("N0lan","tryup");
        myMap.put("III","tryups");
        myMap.put("Cors","study");//add
        //
        // 獲取方法:
        // 第一種方式: 使用keySet
        // 需要分別獲取key和value,沒有面向?qū)ο蟮乃枷?
        // Set<K> keySet() 返回所有的key對象的Set集合
        Set<String> keyvaule= myMap.keySet();
        Iterator<String> keys=keyvaule.iterator();
        while(keys.hasNext()){
            String key=keys.next();
            String vaule=myMap.get(key);
            System.out.println("key=" + key + " vaule=" + vaule);
        }
    }
}

第二種方式:通過values獲取所有值,不能獲取到key對象

第三種方式: Map.Entry遍歷

面向?qū)ο蟮乃枷雽ap集合中的鍵和值映射關(guān)系打包為一個(gè)對象,就是Map.Entry,將該對象存入Set集合,Map.Entry是一個(gè)對象,那么該對象具備的getKey,getValue獲得鍵和值。

 public  static  void Entryt(){
        Map<String,String> myMap=new HashMap<String,String>();
        myMap.put("N0lan","tryup");
        myMap.put("III","tryups");
        myMap.put("Cors","study");//add
        // 返回的Map.Entry對象的Set集合 Map.Entry包含了key和value對象
        Set<Map.Entry<String,String>> ts= myMap.entrySet();
        Iterator<Map.Entry<String,String>> all=ts.iterator();
        while (all.hasNext()){
            Map.Entry<String, String> allin = all.next();
            System.out.println("key="+allin.getKey()+"  value="+allin.getValue());
        }
    }
}

HashMap案例用自定義對象作為Map的key

import sun.invoke.empty.Empty;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class SelfClass {
    public static  void main(String[] args){
        HashMap<Person,String> mymap=new HashMap<Person,String>();
        mymap.put(new Person("N0lan",99),"boy");
        mymap.put(new Person("zAD",99),"GIR");
        Set<Map.Entry<Person,String>> duixiang=mymap.entrySet();
        Iterator<Map.Entry<Person, String>> it = duixiang.iterator();
        while(it.hasNext()){
            Map.Entry<Person,String> next=it.next();
            Person key= next.getKey();
            String value = next.getValue();
            System.out.println(key + " = " + value);
        }
    }
}
class Person{
    private String name;
    private int age;
    Person(){
    }
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
    public String getName(){
        return name;
    }
    public void Setname(String name){
        this.name=name;
    }
    @Override
    public int hashCode() {
        return this.name.hashCode() + age * 37;
    }
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Person) {
            Person p = (Person) obj;
            return this.name.equals(p.name) && this.age == p.age;
        } else {
            return false;
        }
    }
    @Override
    public String toString() {
        return "Person@name:" + this.name + " age:" + this.age;
    }
 
}

TreeMap

TreeMap的排序,TreeMap可以對集合中的鍵進(jìn)行排序。如何實(shí)現(xiàn)鍵的排序?

方式一:元素自身具備比較性

和TreeSet一樣原理,需要讓存儲在鍵位置的對象實(shí)現(xiàn)Comparable接口,重寫compareTo方法,也就是讓元素自身具備比較性,這種方式叫做元素的自然排序也叫做默認(rèn)排序。

方式二:容器具備比較性

當(dāng)元素自身不具備比較性,或者自身具備的比較性不是所需要的。那么此時(shí)可以讓容器自身具備。需要定義一個(gè)類實(shí)現(xiàn)接口Comparator,重寫compare方法,并將該接口的子類實(shí)例對象作為參數(shù)傳遞給TreeMap集合的構(gòu)造方法。

注意:當(dāng)Comparable比較方式和Comparator比較方式同時(shí)存在時(shí),以Comparator的比較方式為主

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • springboot如何獲取相對路徑文件夾下靜態(tài)資源的方法

    springboot如何獲取相對路徑文件夾下靜態(tài)資源的方法

    這篇文章主要介紹了springboot如何獲取相對路徑文件夾下靜態(tài)資源的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • 解決mapper無法自動裝配,未找到‘userMapper‘類型的Bean報(bào)錯(cuò)問題

    解決mapper無法自動裝配,未找到‘userMapper‘類型的Bean報(bào)錯(cuò)問題

    解決Spring Boot中Mapper無法自動裝配的問題,可以通過在Mapper接口上添加@Repository注解來解決,@Mapper和@Repository雖然都可以將類注冊為Bean,但@Mapper是MyBatis的注解,不需要在Spring中配置掃描地址,而@Repository是Spring的注解
    2024-11-11
  • 用Java實(shí)現(xiàn)一個(gè)簡單的布隆過濾器

    用Java實(shí)現(xiàn)一個(gè)簡單的布隆過濾器

    這篇文章主要介紹了用Java實(shí)現(xiàn)一個(gè)簡單的布隆過濾器,布隆過濾器是1970年由布隆提出的,它實(shí)際上是一個(gè)很長的二進(jìn)制向量和一系列隨機(jī)映射函數(shù),布隆過濾器可以用于檢索一個(gè)元素是否在一個(gè)集合中,需要的朋友可以參考下
    2023-12-12
  • Java源碼解析之平衡二叉樹

    Java源碼解析之平衡二叉樹

    在上一章的文章中,我們講到了二叉排序樹,它很好的平衡了插入與查找的效率,但二叉排序樹如果不平衡,那么查找效率就會大大降低,今天要講的這個(gè)平衡二叉樹就是一種解決這個(gè)問題的方法.需要的朋友可以參考下
    2021-05-05
  • idea中l(wèi)ombok啟用的方法示例

    idea中l(wèi)ombok啟用的方法示例

    這篇文章主要介紹了idea中l(wèi)ombok啟用的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • springboot實(shí)現(xiàn)分段上傳功能的示例代碼

    springboot實(shí)現(xiàn)分段上傳功能的示例代碼

    這篇文章主要介紹了springboot實(shí)現(xiàn)分段上傳,包括文件上傳下載,斷點(diǎn)續(xù)傳,增量上傳功能,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Java使用FastExcel實(shí)現(xiàn)合并單元格

    Java使用FastExcel實(shí)現(xiàn)合并單元格

    FastExcel 是一個(gè)采用純 java 開發(fā)的 excel 文件讀寫組件,支持 Excel'97(-2003)(BIFF8)文件格式,本文主要介紹了如何使用FastExcel實(shí)現(xiàn)合并單元格,需要的可以參考下
    2024-12-12
  • java 函數(shù)的重載和重寫實(shí)例代碼

    java 函數(shù)的重載和重寫實(shí)例代碼

    本文主要介紹Java 的重載和重寫,學(xué)習(xí)java的同學(xué)都知道Java的多態(tài)有多重要,這里給大家舉例說明函數(shù)的重載和重寫,希望能幫助有需要的小伙伴
    2016-07-07
  • Maven中plugins和pluginManagement區(qū)別小結(jié)

    Maven中plugins和pluginManagement區(qū)別小結(jié)

    pluginManagement是表示插件聲明,plugins就是直接引入一個(gè)plugin,本文主要介紹了Maven中plugins和pluginManagement區(qū)別小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • 教你如何使用JAVA POI

    教你如何使用JAVA POI

    今天教大家怎么學(xué)習(xí)JAVA POI的用法,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05

最新評論

平凉市| 绥江县| 宁陕县| 亳州市| 古蔺县| 谢通门县| 格尔木市| 封开县| 舟山市| 定安县| 阿坝| 忻州市| 河曲县| 巩留县| 太和县| 新邵县| 苏州市| 孟州市| 英山县| 汝城县| 灵川县| 怀来县| 汝州市| 阜阳市| 永兴县| 丹棱县| 成安县| 垦利县| 资兴市| 蕉岭县| 合江县| 饶阳县| 盘锦市| 承德县| 南京市| 安丘市| 娄烦县| 互助| 海宁市| 灌云县| 新巴尔虎右旗|