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面试指南>仓库,更多精彩内容请到我的仓库里查 ...
随机推荐
- 20162328蔡文琛week07
学号 2016-2017-2 <程序设计与数据结构>第X周学习总结 教材学习内容总结 多态引用在不同的时候可以指向不同类型的对象. 多态引用在运行时才将方法调用用于它的定义绑定在一起. 引 ...
- formidable 表单文件和数据提交
只要涉及文件上传,那么form标签要加一个属性: <form action="http://127.0.0.1/dopost" method="post" ...
- Cypher语法
cypher是neo4j官网提供的声明式查询语言,非常强大,用它可以完成任意的图谱里面的查询过滤,我们知识图谱的一期项目 基本开发完毕,后面会陆续总结学习一下neo4j相关的知识.今天接着上篇文章来看 ...
- MSSQL 2000 错误823恢复
一.故障描述 MSSQL Server 2000 附加数据库错误823,附加数据库失败.数据库没有备份,不能通过备份恢复数据库,急需恢复数据库中的数据. 二.故障分析SQL Server数据库 823 ...
- 新手入门 git
Git是目前世界上最先进的分布式版本控制系统 特点:高端大气上档次 什么是版本控制系统 系统自动记录文件改动 方便同事协作管理 不用自己管理一堆类似的文件了,也不需要把文件传来传去.如果想查看某次改动 ...
- jquery基础总结 -- 转载
jquery的each里面return的使用 在使用jquery的each方法时, return false相当于break,是跳出each循环,return true相当于continue,是继续循 ...
- 快速搭建ssm框架
快速搭建SSM框架 因为最近有很多朋友问我自己的项目搭建的不够完善,并且经常出现一些小问题,那么今天我又整理了一下文档教大家如何快速搭建SSM框架我是用 eclipse搭建的,如果想用idear的话我 ...
- Netty事件监听和处理(上)
陪产假结束了,今天又开始正常上班了,正好赶上米粉节活动,又要忙上一阵了,米粉节活动时间为4.03 - 4.10,有不少优惠,感兴趣的可以关注mi.com或小米商城app. 今天给大家送了福利:小爱音箱 ...
- 命名参数名(含*args , * *kw的区别)
要限制关键字参数的名字,就可以用命名关键字参数 # coding=utf-8 # 命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数.调用方式如下 def person(name, ...
- Mysql 5.1的坑
1.数据库表是区分大小写的 之前程序在5.7数据库没问题,测试环境上数据库是5.1的,就提示表找不到. 2.同样的sql,在5.1上会提示事务获取锁失败,超时返回.而5.7上正常.原因暂未找到.