keySet()、entrySet()和Map.Entry用法

2019-11-16

package com.lixing.jihe13;

import java.util.*;

/**

* @author: ZH

* @date: 2019/10/25 10:45

* @description: Map對象中的keySet()、entrySet()和Map.Entry用法

*/

public class MapEntryTest {

public static void main1(String[] args) {

//keySet():返回的是map對象的key值的set集合

? ? ? ? Map map =new HashMap<>();

? ? ? ? map.put(1, "aa");

? ? ? ? map.put(2, "bb");

? ? ? ? //1.先獲取map集合的key的set集合

? ? ? ? Set keySet = map.keySet();

? ? ? ? //2.根據(jù)set集合,獲取其迭代器

? ? ? ? Iterator iterator = keySet.iterator();

? ? ? ? while (iterator.hasNext()) {

//3.獲取key

? ? ? ? ? ? Integer key = iterator.next();

? ? ? ? ? ? //4.根據(jù)key得到value

? ? ? ? ? ? System.out.println("key=" + key +" value=" + map.get(key));

? ? ? ? }

//output

//key=1 value=aa

//key=2 value=bb

? ? }

public static void main2(String[] args) {

//entrySet()返回映射所包含的映射關系的Set集合(一個關系就是一個鍵-值對),就是把(key-value)作為一個整體一對一對地存放到Set集合當中的。

? ? ? ? Map map =new HashMap<>();

? ? ? ? map.put(1, "aa");

? ? ? ? map.put(2, "bb");

? ? ? ? //1.先獲取map集合的entrySet

//? Set>這個寫法好復雜

//entrySet()的返回值也是返回一個Set集合,此集合的類型為Map.Entry

? ? ? ? Set> entrySet = map.entrySet();

? ? ? ? //2.根據(jù)set集合,獲取其迭代器

//照抄上面Map.Entry復雜寫法

? ? ? ? Iterator> iterator = entrySet.iterator();

? ? ? ? while (iterator.hasNext()) {

//3.獲取迭代器

//Map.Entry

? ? ? ? ? ? Map.Entry map1 = iterator.next();

? ? ? ? ? ? //4.根據(jù)迭代器直接得到key value

? ? ? ? ? ? System.out.println("key=" + map1.getKey() +" value=" + map1.getValue());

? ? ? ? }

//output

//key=1 value=aa

//key=2 value=bb

//ZH總結

//雖然使用keySet及entrySet來進行遍歷能取得相同的結果,但兩者的遍歷速度是有差別的。

//??keySet():迭代后只能通過get()取key;再根據(jù)key值取value。

//??entrySet():迭代后可以e.getKey(),e.getValue()同時取key和value。

//

//同時,keySet()的速度比entrySet()慢了很多,也就是keySet方式遍歷Map的性能不如entrySet性能好

//為了提高性能,以后多考慮用entrySet()方式來進行遍歷。

? ? }

public static void main3(String[] args) {

//values()只能得到values 得不到key

? ? ? ? Map map =new HashMap<>();

? ? ? ? map.put(1, "aa");

? ? ? ? map.put(2, "bb");

? ? ? ? Collection values = map.values();

? ? ? ? Iterator iterator = values.iterator();

? ? ? ? while (iterator.hasNext()) {

String value = iterator.next();

? ? ? ? ? ? System.out.println(" value=" + value);

? ? ? ? }

//output

// value=aa

// value=bb

? ? }

public static void main(String[] args) {

//看看下面代碼能否很順眼

? ? ? ? Map>TOKEN_MAP=new HashMap(1);

? ? ? ? Map map =new HashMap(1);

? ? ? ? boolean flag =true;

? ? ? ? Long nowTime = System.currentTimeMillis() /1000L;

? ? ? ? Set> entrySet =new HashSet();

? ? ? ? if (TOKEN_MAP.get("tokenType") !=null) {

entrySet = ((Map) TOKEN_MAP.get("tokenType")).entrySet();

? ? ? ? }

if (((Set) entrySet).isEmpty()) {

flag =false;

? ? ? ? }

if (!flag) {

map.put(System.currentTimeMillis() /1000L, "token1");

? ? ? ? ? ? TOKEN_MAP.put("tokenType", map);

? ? ? ? }else {

Iterator> iterator = ((Set) entrySet).iterator();

? ? ? ? ? ? if (iterator.hasNext()) {

Map.Entry entry = (Map.Entry) iterator.next();

? ? ? ? ? ? ? ? Long oldTime = (Long) entry.getKey();

? ? ? ? ? ? ? ? Long diff = nowTime - oldTime;

? ? ? ? ? ? ? ? //if (diff < (long)MINUTE) {

? ? ? ? ? ? ? ? if (diff >3) {

TOKEN_MAP.remove("tokenType");

? ? ? ? ? ? ? ? ? ? map.put(System.currentTimeMillis() /1000L, "token2");

? ? ? ? ? ? ? ? ? ? TOKEN_MAP.put("tokenType", map);

? ? ? ? ? ? ? ? }

}

}

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容