Java集合详解二
前一篇我们已经讲过了Collectin是存放单值的最大接口,
可以看到Map接口和其主要之类的关系图如下:

快速访问 HashMap HashTable TreeMap Map输出
那Map就是存放一对值的最大接口。此类的定义如下:
·public interface Map<K,V>
·K:此映射所维护的键的类型
·V:映射值的类型
Map<K,V>接口中提供的主要方法:
| No. | 方法 | 类型 | 说明 |
| 1 | public boolean containsKey(Object key) | 普通 | 判断是否含有指定键的元素 |
| 2 | public boolean containsValue(Object value) | 普通 | 判断是否含有指定值的元素 |
| 3 | public Set<Map.Entry<K,V>> entrySet() | 普通 | 返回此映射中包含的映射关系的集合 |
| 4 | public boolean equals(Object o) | 普通 | 判断是否和自指定元素相等 |
| 5 | public V get(Object key) | 普通 | 根据键值取得指定的值 |
| 6 | public Set<K> keySet() | 普通 | 取得全部键 |
| 7 | public V put(K key,V value) | 普通 | 向集合中加入指定键值 |
| 8 | public void putAll(Map<? extends K,? extends V> m) | 普通 | 向集合中加入指定的一组键值 |
| 9 | public V remove(Object key) | 普通 | 根据键删除指定键值 |
| 10 | public int size() | 普通 | 取得集合大小 |
| 11 | public Collection<V> values() | 普通 | 取得全部值 |
HashMap<K,V>
此类的定义如下:
public class HashMap<K,V>extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable
此类里允许null的键和值,是非同步的,除此之外和HashTable基本上是相同的。并且是无序的。
实例:
package com.fuwh.map; import java.util.HashMap;
import java.util.Map; public class HashMapTest { public static void main(String[] args) { Map<String,String> hashMap=new HashMap<String,String>();
hashMap.put("1", "张三");
hashMap.put("1", "李四");
hashMap.put("3", "李四");
hashMap.put("2", "王武");
hashMap.put("4", "赵六"); System.out.println(hashMap);
}
}

HashTable<K,V>
这个类和Vector是同一时代的。
基本上使用也差不多。
实例:
package com.fuwh.map; import java.util.Hashtable;
import java.util.Map; public class HashTableTest { public static void main(String[] args) { Map<String,String> hashTable=new Hashtable<String,String>();
hashTable.put("1", "张三");
hashTable.put("1", "李四");
hashTable.put("3", "李四");
hashTable.put("2", "王武");
hashTable.put("4", "赵六"); System.out.println(hashTable);
}
}

TreeMap
该类是基于红黑树的原理对其按照key的自然顺序排序。
实例:
package com.fuwh.map; import java.util.Map;
import java.util.TreeMap; public class TreeMapTest { public static void main(String[] args) { Map<String,String> treeMap=new TreeMap<String,String>();
treeMap.put("1", "张三");
treeMap.put("1", "李四");
treeMap.put("3", "李四");
treeMap.put("2", "王武");
treeMap.put("4", "赵六"); System.out.println(treeMap);
}
}

Map的输出
虽然说集合都应该使用Iterator来输出。但是Map不能直接使用Iterator来输出。因为没有提供iterator()方法。
查看Map接口,可以发现,在此接口中有一个嵌套类,定义如下:
public static interface Map.Entry<K,V>
其实在Map中存放的虽然是键值对,实际上存放的是一个个的Map.Entry对象。

那么,就使用Map.Entry来对Map进行输出。
实例:
package com.fuwh.map; import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; public class HashMapEntry { public static void main(String[] args) { Map<String,String> hashMap=new HashMap<String,String>();
hashMap.put("1", "张三");
hashMap.put("1", "李四");
hashMap.put("3", "李四");
hashMap.put("2", "王武");
hashMap.put("4", "赵六");
Set<Entry<String,String>> entrySet =hashMap.entrySet();
Iterator<Entry<String,String>> it=entrySet.iterator();
while(it.hasNext()){
Entry<String, String> entry=it.next();
System.out.println(entry.getKey()+"-->"+entry.getValue());
}
}
}

使用foreach输出:
package com.fuwh.map; import java.util.HashMap;
import java.util.Map; public class HashMapForeach { public static void main(String[] args) { Map<String,String> hashMap=new HashMap<String,String>();
hashMap.put("1", "张三");
hashMap.put("1", "李四");
hashMap.put("3", "李四");
hashMap.put("2", "王武");
hashMap.put("4", "赵六");
for(Map.Entry<String, String> entry:hashMap.entrySet()){
System.out.println(entry.getKey()+"-->"+entry.getValue());
} }
}

另一种输出方式:
package com.fuwh.map; import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; public class HashMapOut { public static void main(String[] args) { Map<String,String> hashMap=new HashMap<String,String>();
hashMap.put("1", "张三");
hashMap.put("1", "李四");
hashMap.put("3", "李四");
hashMap.put("2", "王武");
hashMap.put("4", "赵六");
Set<String> keySet1=hashMap.keySet();
Iterator<String> it=keySet1.iterator();
while(it.hasNext()){
String key=it.next();
System.out.println(key+"-->"+hashMap.get(key));
}
}
}

Java集合详解二的更多相关文章
- Java集合详解3:Iterator,fail-fast机制与比较器
Java集合详解3:Iterator,fail-fast机制与比较器 今天我们来探索一下LIterator,fail-fast机制与比较器的源码. 具体代码在我的GitHub中可以找到 https:/ ...
- Java集合详解6:这次,从头到尾带你解读Java中的红黑树
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
- Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
- Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
- Java集合详解8:Java的集合类细节精讲
Java集合详解8:Java集合类细节精讲 今天我们来探索一下Java集合类中的一些技术细节.主要是对一些比较容易被遗漏和误解的知识点做一些讲解和补充.可能不全面,还请谅解. 本文参考:http:// ...
- Java集合详解6:TreeMap和红黑树
Java集合详解6:TreeMap和红黑树 初识TreeMap 之前的文章讲解了两种Map,分别是HashMap与LinkedHashMap,它们保证了以O(1)的时间复杂度进行增.删.改.查,从存储 ...
- Java集合详解8:Java集合类细节精讲,细节决定成败
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
- Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
- Java集合详解2:一文读懂Queue和LinkedList
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
随机推荐
- 小米官网的css3导航菜单
HTML代码: <div class="nav"> <ul> <li><a href="#">首页</a& ...
- SQL数据库开发中的一些经典代码
1.按姓氏笔画排序: Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 2.数据库加密: ...
- 20145237 《Java程序设计》第2周学习总结
教材学习内容总结 本周我学习了java的基础语法.分为类型.变量与运算符,流程控制. 一.类型:1.Java可以区分为基本类型和类类型.类类型也称作参考类型.2.Java中基本类型主要是整数.字节.浮 ...
- 乐动力APP案例
第一部分 调研, 评测 下载软件并使用起来,描述最简单直观的个人第一次上手体验. 这款软件的主界面功能还是比较完善,里面有多个关于运动相关的数据,还有一些推荐健身教程,记录功能也十分不错,其中最难理解 ...
- Flask 扩展 Flask-RESTful
Flask路由可以指定HTTP请求方法,并在请求函数中根据不同的请求方法,执行不同的逻辑.这样实现一个Restful的请求已经相当简单了 Flask还有更简便的方法,就是其Flask-RESTful扩 ...
- BEM 中文翻译
BEM 原文请看 getBEM Introduction(介绍) Block 独立实体,独立的意义 Examples:header, container, menu, checkbox, input ...
- 【微软大法好】VS Tools for AI全攻略(2)
接着上文,我们来讨论如何使用Azure资源来训练我们的tensorflow项目.Azure云我个人用得很多,主要是因为微软爸爸批了150刀每月的额度,我可以愉快地玩耍. 那么针对Azure,有成套的两 ...
- thinkphp后台向前台传值没有传过去的小问题
if($listyyarr){ $this->assign('listyyarr',$listyyarr); //$this->assign('nowDated',$endDated); ...
- C语言使用vs2013进行编辑
由于vs2013是微软开发的产品所以在windows平台下无限兼容windows所有虽然比较大,但是还是比较值得 但是在运行C程序的遇到问题就是控制台一闪而过通过ctrl+F5执行也是不管用: #in ...
- PCB名詞解釋:通孔、盲孔、埋孔(转载)
文章转载自:https://www.researchmfg.com/2011/07/pth-blind-hole-buried-hole/ PCB名詞解釋:通孔.盲孔.埋孔 Posted by 工作熊 ...