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);
? ? ? ? ? ? ? ? }
}
}
}
}