MapString,List dataMap = new HashMapString,List();
目前創(chuàng)新互聯(lián)建站已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機、網(wǎng)站托管維護、企業(yè)網(wǎng)站設(shè)計、信陽網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
for(int i=0;ixsList.size();i++){
dataMap.put(xsList.get(i).學(xué)號, xsList.get(i));
}
for(int i=0;icjList.size();i++){
dataMap.put(cjList.get(i).學(xué)號, cjList.get(i));
}
得到的dataMap就是需要插入的數(shù)據(jù),不過以前的數(shù)據(jù)需要先刪再插(而且前提是xsList和cjList泛型得相同)。
話說如果不用map還可以用一個方法:
// 成績表的學(xué)號List
ListString cjNum = new ArrayListString();
for(int i=0;icjList.size();i++){
cjNum.add(cjList.get(i).學(xué)號);
}
for(int i=0;ixsList.size();i++){
// 學(xué)生表的學(xué)號在成績表里存在
if(cjNum.contains(xsList.get(i).學(xué)號)){
覆蓋
}else{
// 學(xué)生表的學(xué)號在成績表里不存在
在cj表創(chuàng)建添加這個學(xué)生
}
}
HashMapString,?String?emails?=?new?HashMapString,?String();??
//方法一:?用entrySet()??
Iterator?it?=?emails.entrySet().iterator();??
while(it.hasNext()){??
Map.Entry?m=(Map.Entry)it.next();??
System.out.println("email-"?+?m.getKey()?+?":"?+?m.getValue());??
}??
//?方法二:直接再循環(huán)中??
for?(Map.EntryString,?String?m?:?emails.entrySet())?{??
System.out.println("email-"?+?m.getKey()?+?":"?+?m.getValue());??
}??
//?方法三:用keySet()??
Iterator?it?=?emails.keySet().iterator();??
while?(it.hasNext()){??
String?key=(String)it.next();??
System.out.println("email-"?+?key?+?":"?+?emails.get(key));
}
Java中遍歷Map對象的4種方法:
1、通過Map.entrySet遍歷key和value,在for-each循環(huán)中使用entries來遍歷.推薦,尤其是容量大時。
2、通過Map.keySet遍歷key,通過鍵找值value遍歷(效率低),普遍使用,二次取值。
3、如果只需要map中的鍵或者值,你可以通過Map.keySet或Map.values來實現(xiàn)遍歷,而不是用entrySet。在for-each循環(huán)中遍歷keys或values。
4、通過Map.entrySet使用iterator遍歷key和value。
擴展資料:
關(guān)于JAVA的遍歷知識補充:
1、list和set集合都實現(xiàn)了Iterable接口,所以他們的實現(xiàn)類可以使用迭代器遍歷,map集合未實現(xiàn)該接口,若要使用迭代器循環(huán)遍歷,需要借助set集合。
2、使用EntrySet 遍歷,效率更高。
參考資料:
百度百科--Map(映射)
map.entrySet() 轉(zhuǎn)化為 set 集合,此集合的類型為Map.Entry。之后進行遍歷。Map.Entry是Map聲明的一個內(nèi)部接口,此接口為泛型,定義為EntryK,V。它表示Map中的一個實體(一個key-value對)。接口中有g(shù)etKey(),getValue方法。
關(guān)于java中遍歷map具體有四種方式,請看下文詳解。
1、這是最常見的并且在大多數(shù)情況下也是最可取的遍歷方式,在鍵值都需要時使用。
MapInteger, Integer map = new?HashMapInteger, Integer();
for?(Map.EntryInteger, Integer entry : map.entrySet()) {
System.out.println("Key = "?+ entry.getKey() + ", Value = "?+ entry.getValue());
}
2、在for-each循環(huán)中遍歷keys或values。
如果只需要map中的鍵或者值,你可以通過keySet或values來實現(xiàn)遍歷,而不是用entrySet。
MapInteger, Integer map = new?HashMapInteger, Integer();
for?(Integer key : map.keySet()) {
System.out.println("Key = "?+ key);
}
for?(Integer value : map.values()) {
System.out.println("Value = "?+ value);
}
該方法比entrySet遍歷在性能上稍好(快了10%),而且代碼更加干凈。
3、使用Iterator遍歷
使用泛型:
MapInteger, Integer map = new?HashMapInteger, Integer();
IteratorMap.EntryInteger, Integer entries = map.entrySet().iterator();
while?(entries.hasNext()) {
Map.EntryInteger, Integer entry = entries.next();
System.out.println("Key = "?+ entry.getKey() + ", Value = "?+ entry.getValue());
}
不使用泛型:
Map map = new?HashMap();
Iterator entries = map.entrySet().iterator();
while?(entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("Key = "?+ key + ", Value = "?+ value);
}
4、通過鍵找值遍歷(效率低)
MapInteger, Integer map = new?HashMapInteger, Integer();
for?(Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key = "?+ key + ", Value = "?+ value);
}
假設(shè)Map中的鍵值對為1=11,2=22,3=33,現(xiàn)用方法1來遍歷Map代碼和調(diào)試結(jié)果如下:
擴展資料:
1、HashMap的重要參數(shù)
HashMap 的實例有兩個參數(shù)影響其性能:初始容量 和加載因子。容量是哈希表中桶的數(shù)量,初始容量只是哈希表在創(chuàng)建時的容量。
加載因子 是哈希表在其容量自動增加之前可以達到多滿的一種尺度。當哈希表中的條目數(shù)超出了加載因子與當前容量的乘積時,則要對該哈希表進行 rehash 操作(即重建內(nèi)部數(shù)據(jù)結(jié)構(gòu)),從而哈希表將具有大約兩倍的桶數(shù)。
在Java編程語言中,加載因子默認值為0.75,默認哈希表元為101。
2、HashMap的同步機制
注意,此實現(xiàn)不是同步的。 如果多個線程同時訪問一個哈希映射,而其中至少一個線程從結(jié)構(gòu)上修改了該映射,則它必須保持外部同步。
(結(jié)構(gòu)上的修改是指添加或刪除一個或多個映射關(guān)系的任何操作;以防止對映射進行意外的非同步訪問,如下:
Map m = Collections.synchronizedMap(new HashMap(...));
參考資料:百度百科-Hashmap
java根據(jù)Map的值(value)取鍵(key) 的實現(xiàn)方法有4種,分別為:
(1)使用for循環(huán)遍歷
(2)使用Iterator迭代器
(3)使用KeySet迭代
(4)使用EnterySet迭代
下面為以上4種方法具體實現(xiàn)的代碼:
1、使用for循環(huán)遍歷
public static Object getKey(HashMapObject,Object map, String v) {
String key = "";
for (Map.EntryString, Object m :map.entrySet()) ?{
if (m.getValue().equals(v)) {
key = m.getKey();
}}
return key;
}
2、使用Iterator迭代器
public static Object getKey(HashMapObject,Object map, String v) {
Set set = map.entrySet();
Iterator iterator=set.iterator();
String key = "";
while (iterator.hasNext()) {
Map.EntryString, Object enter = (EntryString, Object)
iterator.next();
if (enter.getValue().equals(v)) {
key = enter.getKey();
}}
return key;
}
3、使用KeySet迭代
public static Object getKey(HashMapObject,Object map, String v) {
IteratorObject it = map.keySet().iterator();
while (it.hasNext()) {
String key = it.next().toString();
if ((String) map.get(key).equals(v)) return key;
}
return null;
}
4、使用EnterySet迭代
public static Object getKey(HashMapObject,Object map, String v) {
String key = "";
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Entry) it.next();
Object obj = entry.getValue();
if (obj != null obj.equals(value)) {
key = (String) entry.getKey();
}}
return key;
}
擴展資料:
java獲取map的key和value的方法:
(1)?通過map.keySet()方法,先獲取map的key,然后根據(jù)key獲取對應(yīng)的value。
for(String key : map.keySet()){
String value = map.get(key);
System.out.println(key+"? "+value);
}
IteratorString iter = map.keySet().iterator();
while(iter.hasNext()){
String key=iter.next();
String value = map.get(key);
System.out.println(key+" "+value);
}
(2)通過map.entrySet()方法,循環(huán)map里面的每一對鍵值對,然后獲取key和value。
for(EntryString, String vo : map.entrySet()) {
vo.getKey();
vo.getValue();
System.out.println(vo.getKey()+"? "+vo.getValue());
}
IteratorEntryString,String iter = map.entrySet().iterator();
while(iter.hasNext()){
EntryString,String entry = iter.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+" "+value);
}
參考資料來源:JAVA官方文檔-Map