新手初學(xué)Java-Map
Map
Map是一種依照鍵(key)存儲(chǔ)元素的容器,鍵(key)很像下標(biāo),在List中下標(biāo)是整數(shù)。在Map中鍵(key)可以使任意類型的對(duì)象。Map中不能有重復(fù)的鍵(Key),每個(gè)鍵(key)都有一個(gè)對(duì)應(yīng)的值(value)。
一個(gè)鍵(key)和它對(duì)應(yīng)的值構(gòu)成map集合中的一個(gè)元素。
Map中的元素是兩個(gè)對(duì)象,一個(gè)對(duì)象作為鍵,一個(gè)對(duì)象作為值。鍵不可以重復(fù),但是值可以重復(fù)。
看頂層共性方法找子類特有對(duì)象.
Map與Collection在集合框架中屬并列存在
Map存儲(chǔ)的是鍵值對(duì)
Map存儲(chǔ)元素使用put方法,Collection使用add方法
Map集合沒有直接取出元素的方法,而是先轉(zhuǎn)成Set集合,在通過(guò)迭代獲取元素
Map集合中鍵要保證唯一性
也就是Collection是單列集合, Map 是雙列集合。
學(xué)習(xí)體系
Map學(xué)習(xí)體系:
---| Map 接口 將鍵映射到值的對(duì)象。一個(gè)映射不能包含重復(fù)的鍵;每個(gè)鍵最多只能映射到一個(gè)值。
---| HashMap 采用哈希表實(shí)現(xiàn),所以無(wú)序
---| TreeMap 可以對(duì)健進(jìn)行排序
---|Hashtable:
底層是哈希表數(shù)據(jù)結(jié)構(gòu),線程是同步的,不可以存入null鍵,null值。
效率較低,被HashMap 替代。
---|HashMap:
底層是哈希表數(shù)據(jù)結(jié)構(gòu),線程是不同步的,可以存入null鍵,null值。
要保證鍵的唯一性,需要覆蓋hashCode方法,和equals方法。
---| LinkedHashMap:
該子類基于哈希表又融入了鏈表??梢訫ap集合進(jìn)行增刪提高效率。
---|TreeMap:
底層是二叉樹數(shù)據(jù)結(jié)構(gòu)??梢詫?duì)map集合中的鍵進(jìn)行排序。需要使用Comparable或者Comparator 進(jìn)行比較排序。return 0,來(lái)判斷鍵的唯一性。
常見方法
1、添加:
1、V put(K key, V value) (可以相同的key值,但是添加的value值會(huì)覆
蓋前面的,返回值是前一個(gè),如果沒有就返回null)
2、putAll(Map<? extends K,? extends V> m) 從指定映射中將所有映射關(guān)
系復(fù)制到此映射中(可選操作)。
2、刪除
1、remove() 刪除關(guān)聯(lián)對(duì)象,指定key對(duì)象
2、clear() 清空集合對(duì)象
3、獲取
1:value get(key); 可以用于判斷鍵是否存在的情況。當(dāng)指定的鍵不存在的時(shí)候,返
回的是null。
3、判斷:
1、boolean isEmpty() 長(zhǎng)度為0返回true否則false
2、boolean containsKey(Object key) 判斷集合中是否包含指定的key
3、boolean containsValue(Object value) 判斷集合中是否包含指定的value
4、長(zhǎng)度:
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()),通過(guò)Set的迭代器取出Set集合中的每一個(gè)元素(Iterator)就是Map集合中的所有的鍵,再通過(guò)get方法獲取鍵對(duì)應(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對(duì)象的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);
}
}
}

第二種方式:通過(guò)values獲取所有值,不能獲取到key對(duì)象

第三種方式: Map.Entry遍歷
面向?qū)ο蟮乃枷雽ap集合中的鍵和值映射關(guān)系打包為一個(gè)對(duì)象,就是Map.Entry,將該對(duì)象存入Set集合,Map.Entry是一個(gè)對(duì)象,那么該對(duì)象具備的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對(duì)象的Set集合 Map.Entry包含了key和value對(duì)象
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案例用自定義對(duì)象作為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可以對(duì)集合中的鍵進(jìn)行排序。如何實(shí)現(xiàn)鍵的排序?
方式一:元素自身具備比較性
和TreeSet一樣原理,需要讓存儲(chǔ)在鍵位置的對(duì)象實(shí)現(xiàn)Comparable接口,重寫compareTo方法,也就是讓元素自身具備比較性,這種方式叫做元素的自然排序也叫做默認(rèn)排序。
方式二:容器具備比較性
當(dāng)元素自身不具備比較性,或者自身具備的比較性不是所需要的。那么此時(shí)可以讓容器自身具備。需要定義一個(gè)類實(shí)現(xiàn)接口Comparator,重寫compare方法,并將該接口的子類實(shí)例對(duì)象作為參數(shù)傳遞給TreeMap集合的構(gòu)造方法。
注意:當(dāng)Comparable比較方式和Comparator比較方式同時(shí)存在時(shí),以Comparator的比較方式為主
總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Spring?Boot?使用?SSE?方式向前端推送數(shù)據(jù)詳解
這篇文章主要介紹了Spring?Boot?使用SSE方式向前端推送數(shù)據(jù)詳解,SSE簡(jiǎn)單的來(lái)說(shuō)就是服務(wù)器主動(dòng)向前端推送數(shù)據(jù)的一種技術(shù),它是單向的,也就是說(shuō)前端是不能向服務(wù)器發(fā)送數(shù)據(jù)的2022-08-08
Java使用雪花算法生成唯一ID的實(shí)現(xiàn)示例
雪花算法是 Twitter 開源的一種分布式ID生成算法,其目的是生成全局唯一的 ID,本文主要介紹了Java使用雪花算法生成唯一ID的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
比較java中Future與FutureTask之間的關(guān)系
在本篇文章里我們給大家分享了java中Future與FutureTask之間的關(guān)系的內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。2018-10-10
JavaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(3)
這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)第三篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
基于@Valid和@Validated驗(yàn)證List集合的踩坑記錄
這篇文章主要介紹了基于@Valid和@Validated驗(yàn)證List集合的踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
圖解Spring框架的設(shè)計(jì)理念與設(shè)計(jì)模式
這篇文章主要通過(guò)多圖詳細(xì)解釋Spring框架的設(shè)計(jì)理念與設(shè)計(jì)模式,需要的朋友可以參考下2015-08-08

