Java Map相关学习总结
Java中Map的相关用法
把一个Map转化为List
map转List有以下三种转化方式:
- 把map的键key转化为list
- 把map的值value转化为list
- 把map的键值key-value转化为list
public class Test {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(2, "jay");
map.put(1, "whx");
map.put(3, "huaxiao");
//把一个map的键转化为list
List<Integer> keyList = new ArrayList<>(map.keySet());
System.out.println(keyList);
//把map的值转化为list
List<String> valueList = new ArrayList<>(map.values());
System.out.println(valueList);
把map的键值转化为list
List entryList = new ArrayList(map.entrySet());
System.out.println(entryList);
}
}
遍历一个Map
entrySet+for实现遍历
ublic class EntryMapTest {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(2, "jay");
map.put(1, "whx");
map.put(3, "huaxiao");
for(Map.Entry entry: map.entrySet()) {
// get key
Integer key = (Integer) entry.getKey();
// get value
String value = (String) entry.getValue();
System.out.println("key:"+key+",value:"+value);
}
}
}
Iterator+while实现遍历
public class IteratorMapTest {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(2, "jay");
map.put(1, "whx");
map.put(3, "huaxiao");
Iterator itr = map.entrySet().iterator();
while(itr.hasNext()) {
Map.Entry entry = (Map.Entry) itr.next();
// get key
Integer key = (Integer) entry.getKey();
// get value
String value = (String) entry.getValue();
System.out.println("key:"+key+",value:"+value);
}
}
}
根据Map的keys进行排序
把Map.Entry放进list,再用Comparator对list进行排序
# 伪代码
List list = new ArrayList(map.entrySet());
Collections.sort(list, (Entry e1, Entry e2)-> {
return e1.getKey().compareTo(e2.getKey());
});
public class SortKeysMapTest {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("2010", "jay");
map.put("1999", "whx");
map.put("3010", "huaxiao");
List<Map.Entry<String,String>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, (Map.Entry e1, Map.Entry e2)-> {
return e1.getKey().toString().compareTo(e2.getKey().toString());
});
for (Map.Entry entry : list) {
System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());
}
}
}
使用SortedMap+TreeMap+Comparator实现
#伪代码
SortedMap sortedMap = new TreeMap(new Comparator() {
@Override
public int compare(K k1, K k2) {
return k1.compareTo(k2);
}
});
sortedMap.putAll(map);
public class SortKeys2MapTest {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("2010", "jay");
map.put("1999", "whx");
map.put("3010", "huaxiao");
SortedMap sortedMap = new TreeMap(new Comparator<String>() {
@Override
public int compare(String k1, String k2) {
return k1.compareTo(k2);
}
});
sortedMap.putAll(map);
Iterator itr = sortedMap.entrySet().iterator();
while(itr.hasNext()) {
Map.Entry entry = (Map.Entry) itr.next();
// get key
String key = (String) entry.getKey();
// get value
String value = (String) entry.getValue();
System.out.println("key:"+key+",value:"+value);
}
}
}
对Map的values进行排序
#伪代码
List list = new ArrayList(map.entrySet());
Collections.sort(list, (Entry e1, Entry e2) ->{
return e1.getValue().compareTo(e2.getValue());
});
public class SortValuesMapTest {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("2010", "jay");
map.put("1999", "whx");
map.put("3010", "huaxiao");
List <Map.Entry<String,String>>list = new ArrayList<>(map.entrySet());
Collections.sort(list, (Map.Entry e1, Map.Entry e2)-> {
return e1.getValue().toString().compareTo(e2.getValue().toString());
}
);
for (Map.Entry entry : list) {
System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());
}
}
}
结果:
key:3010,value:huaxiao
key:2010,value:jay
key:1999,value:whx
Map各种类型区别
| HashMap | TreeMap | Hashtable | ConcurrentHashMap | |
|---|---|---|---|---|
| 有序性 | 否 | 是 | 否 | 否 |
| null k-v | 是-是 | 否-是 | 否-否 | 否-否 |
| 线性安全 | 否 | 否 | 是 | 是 |
| 时间复杂度 | O(1) | O(log n) | O(1) | O(log n) |
| 底层结构 | 数组+链表+红黑树 | 红黑树 | 数组+链表 | 数组+链表+红黑树 |
本博客所有文章除特别声明外,大部分为学习心得,欢迎与博主联系讨论