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.根据set集合,获取其迭代器
Iterator iterator = keySet.iterator();
while (iterator.hasNext()) {
//3.获取key
Integer key = iterator.next();
//4.根据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.根据set集合,获取其迭代器
//照抄上面Map.Entry复杂写法
Iterator> iterator = entrySet.iterator();
while (iterator.hasNext()) {
//3.获取迭代器
//Map.Entry
Map.Entry map1 = iterator.next();
//4.根据迭代器直接得到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;再根据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);
}
}
}
}
}