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面试指南>仓库,更多精彩内容请到我的仓库里查 ...
随机推荐
- Struts2学习笔记三 访问servlet
结果跳转方式 转发 <!-- 转发 --> <action name="Demo1Action" class="cn.itheima.a_result. ...
- alpha冲刺第六天
一.合照 二.项目燃尽图 三.项目进展 主界面首页内容呈现 我的栏目之我的问题完成 我的栏目之我的提问完成 还是插不进去,然后打算先放一放,一直在一个地方纠结那么久脑子太乱 四.明日规划 问答界面问题 ...
- C语言博客作业--嵌套循环
一.PTA实验作业 题目1:7-4 换硬币 2 .设计思路 第一步:定义3个整型变量i,j,k用于循环,定义3个整型变量x,count,total分别用于储存零钱数额,换法个数,硬币数量: 第二步:输 ...
- django模型——数据库(二)
模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...
- linux 50个常用命令
1.ls命令 ls是list的缩写,常用命令为ls(显示出当前目录列表),ls -l(详细显示当前目录列表),ls -lh(人性化的详细显示当前目录列表),ls -a(显示出当前目录列表,包含隐藏文件 ...
- 小草手把手教你 LabVIEW 串口仪器控制——初识VISA串口
有些人,学习一样东西时候,喜欢现成的例子.很多人学习一门技术,都喜欢现成的例子开始,比如学单片机的啊,最开始都是修改的例子吧,学语言的也是.最开始都是模仿.这个年头看书上的理论知识太浪费时间了.所以啊 ...
- 配置SpringAop时需要用到的AspectJ表达式
Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式 execu ...
- 浅谈 ThreadLocal
有时,你希望将每个线程数据(如用户ID)与线程关联起来.尽管可以使用局部变量来完成此任务,但只能在本地变量存在时才这样做.也可以使用一个实例属性来保存这些数据,但是这样就必须处理线程同步问题.幸运的是 ...
- IE bug:ajax请求返回304解决方案
bug说明: 同一账户下的默认收货地址只有一个,默认收货地址可以修改,修改完成后,使用ajax重新加载收货地址部分. 默认收货地址状态标记:status = 1: 在IE浏览器做了修改后,重新加载的数 ...
- MySQL关系表查询两个表的数据
如下,有四张表:游戏类型表,游戏表,点卡和游戏关系表,点卡表 CREATE TABLE `gamesType`( `tId` INT AUTO_INCREMENT NOT NULL PRIMARY K ...