Map与Collection 并列存在,用于保存具有映射关系的数据:Key-Value

Map中的Key和Value都可以是任何引用类型的数据

Map中的Key用Set存放,不允许重复,即同一个Map对象所对应的类,须重写HashCode()和equals()方法

常用String类作为Map的 "键"

Key和vlaue之间存在单项一对一关系,即通过指定的Key总能找到唯一的,确定的value

TestMap

  1. package com.aff.coll;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7. import java.util.Collection;
  8. import java.util.Comparator;
  9. import java.util.HashMap;
  10. import java.util.Iterator;
  11. import java.util.LinkedHashMap;
  12. import java.util.Map;
  13. import java.util.Properties;
  14. import java.util.Set;
  15. import java.util.TreeMap;
  16.  
  17. import org.junit.Test;
  18.  
  19. /*
  20. Collection接口
  21.  
  22. Map接口
  23. |----HashMap:Map的主要实现类
  24. |----LinkedHashMap:使用链表维护添加进 Map 中的顺序.故遍历map时,是按添加的顺序遍历的
  25. |----TreeMap: 按照添加进Map中的元素的 key 的指定属性进行排序,要求key必须是同一个类对象
  26. 自动排序 vs 定制排序
  27. |----Hashtable :①古老的Map实现类,线程安全,不允许使用null作为key和value
  28. ②和HashMap一样不能保证其中key-value对的顺序
  29. ③判断两个key相等,两个value相等的标准和HashMap一致
  30. ④太古老,标识符的table还是小写的,不建议使用
  31. |---- Properties :常用来处理属性文件。键和值都为String类型的
  32. */
  33. public class TestMap {
  34. //使用Properties处理属性文件
  35. @Test
  36. public void testProperties() throws FileNotFoundException, IOException{
  37. Properties pros = new Properties();
  38. pros.load(new FileInputStream(new File("jdbc.properties")));
  39. String user = pros.getProperty("user");
  40. System.out.println(user);//root;
  41. String password = pros.getProperty("password");
  42. System.out.println(password);//123ab;
  43. }
  44.  
  45. /* Map常用方法:
  46. Object put(Objet key,Object value); 向Map中添加一个元素
  47. Object remove(Object key); 按照指定的key删除此key-value
  48. void putAll(Map t);
  49. void clear(); 清空
  50.  
  51. Object get(Object key); 获取指定key的value值,若无此key,则返回null
  52.  
  53. boolean ontainsKey(Object key);
  54. boolean containsValue(Object value);
  55. int size(); 返回集合的长度
  56. boolean isEmpty();
  57. boolean equals(Object obj);
  58. */
  59.  
  60. //HashMap
  61. /*
  62. 1.HashMap :key使用Set来存放的,不可重复,Value是用collection来存放的,
  63. 可重复的一个key-value对,是一个Entry.所有的Entry是用Set存放的,也是不可重复的。
  64. 2.向HashMap中添加元素时,会调用key所在的类的equals()方法,判断两个key是否相同,
  65. 若相同,则只能添加进后添加的那个元素
  66. */
  67. @Test
  68. public void testHashMap() {
  69. Map map = new HashMap();
  70. map.put("AA", 12);
  71. map.put("BB", 143);
  72. map.put("BB", 4656);
  73. map.put(123, "VV");
  74. map.put(null, null);
  75. System.out.println(map.size());//
  76. }
  77.  
  78. //遍历Map
  79. @Test
  80. public void testHashMap2() {
  81. /*
  82. 如何遍历Map
  83. Set KeySet();
  84. Collection values();
  85. Set entrySet();
  86. */
  87. Map map = new HashMap();
  88. map.put("AA", 12);
  89. map.put("BB", 143);
  90. map.put(123, "VV");
  91. map.put(null, null);
  92. map.put(new Person("DD", 23), 46);
  93.  
  94. //1.遍历key集
  95. Set set = map.keySet();
  96. for(Object obj: set){
  97. System.out.println(obj);
  98. }
  99. System.out.println("----");
  100. //2.遍历value集
  101. Collection values = map.values();
  102. Iterator iterator = values.iterator();
  103. while(iterator.hasNext()){
  104. System.out.println(iterator.next());
  105. }
  106. //3.遍历key-value对
  107. //方式一:
  108. Set set1 = map.keySet();
  109. for(Object obj : set1){
  110. //Object get(Object key); 获取指定key的value值,若无此key,则返回null
  111. System.out.println(obj+"----->"+map.get(obj));
  112. }
  113. System.out.println("------");
  114.  
  115. //方式二:
  116. Set set2 = map.entrySet();
  117. for(Object obj:set2){
  118. Map.Entry entry = (Map.Entry)obj;
  119. System.out.println(entry.getKey()+"---->"+entry.getValue());
  120. }
  121. }
  122.  
  123. //LinkedHashMap 使用链表维护添加进 Map 中的顺序.故遍历map时,是按添加的顺序遍历的
  124. @Test
  125. public void testLinkedHashMap(){
  126. Map map = new LinkedHashMap();
  127. map.put("AA", 12);
  128. map.put("BB", 143);
  129. map.put(123, "VV");
  130. map.put(null, null);
  131. map.put(new Person("DD", 23), 46);
  132. System.out.println(map);
  133. }
  134.  
  135. //TreeMap 的自然排序
  136. @Test
  137. public void testTreeMap(){
  138. Map map = new TreeMap();
  139. map.put(new Person("AA", 23), 46);
  140. map.put(new Person("CC", 22), 68);
  141. map.put(new Person("GGG", 33), 26);
  142. map.put(new Person("BB", 14), 98);
  143. map.put(new Person("CC", 14), 98);
  144. // System.out.println(map);
  145.  
  146. Set set1 = map.keySet();
  147. for(Object obj : set1){
  148. //Object get(Object key); 获取指定key的value值,若无此key,则返回null
  149. System.out.println(obj+"----->"+map.get(obj));
  150. }
  151. }
  152.  
  153. //TreeMap 的定制排序
  154. @Test
  155. public void testTreeMap2(){
  156. Comparator com = new Comparator() {
  157. @Override
  158. public int compare(Object o1, Object o2) {
  159. if(o1 instanceof Customer && o2 instanceof Customer){
  160. Customer c1 = (Customer)o1;
  161. Customer c2 = (Customer)o2;
  162. int i = c1.getId().compareTo(c2.getId());
  163. if(i == 0){
  164. return c1.getName().compareTo(c2.getName());
  165. }
  166. return i;
  167. }
  168. return 0;
  169. }
  170. };
  171. Map map = new TreeMap();
  172. map.put(new Person("AA", 23), 46);
  173. map.put(new Person("CC", 22), 68);
  174. map.put(new Person("GGG", 33), 26);
  175. map.put(new Person("BB", 14), 98);
  176. map.put(new Person("CC", 14), 98);
  177. // System.out.println(map);
  178.  
  179. Set set1 = map.keySet();
  180. for(Object obj : set1){
  181. //Object get(Object key); 获取指定key的value值,若无此key,则返回null
  182. System.out.println(obj+"----->"+map.get(obj));
  183. }
  184. }
  185. }
  1.  
  2. jdbc.properties
  1. user=root;
  2. password=123ab;

Customer, Person与上篇相同

Map接口之HashMap,LinkedHashMap,TreeMap的更多相关文章

  1. Java中HashMap,LinkedHashMap,TreeMap的区别[转]

    原文:http://blog.csdn.net/xiyuan1999/article/details/6198394 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类 ...

  2. Java HashMap,LinkedHashMap,TreeMap

    Java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMapMap主要用于存储健值对,根据 ...

  3. Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法

    Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...

  4. java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...

  5. HashMap,LinkedHashMap,TreeMap对比

    共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...

  6. java HashMap,LinkedHashMap,TreeMap应用

    共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...

  7. Java集合(十)实现Map接口的HashMap

    Java集合(十)继承Map接口的HashMap 一.HashMap简介(基于JDK1.8) HashMap是基于哈希表(散列表),实现Map接口的双列集合,数据结构是“链表散列”,也就是数组+链表 ...

  8. map,set,list等集合解析以及HashMap,LinkedHashMap,TreeMap等该选谁的的区别

    前言: 今天在整理一些资料时,想起了map,set,list等集合,于是就做些笔记,提供给大家学习参考以及自己日后回顾. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允 ...

  9. Map接口,Map.Entry,hashMap类,TreeMap类,WeakHashMap。

    Collection接口之前接触过,每次保存的对象是一个对象,但是在map中保存的是一对对象,是以key->value形式保存的. 定义: public interface Map<K,V ...

随机推荐

  1. unittest 管理用例生成测试报告

    # 登录方法的封装 from appium import webdriver from time import sleep from python_selenium.Slide import swip ...

  2. ubuntu16.04安装FastDFS-5.08

    fastdfs github地址: https://github.com/happyfish100/ 1.FastDFS上传原理 - storage定时向tracker上传状态信息 - client上 ...

  3. andorid jar/库源码解析之Butterknife

    目录:andorid jar/库源码解析 Butterknife: 作用: 用于初始化界面控件,控件方法,通过注释进行绑定控件和控件方法 栗子: public class MainActivity e ...

  4. OSG程序设计之Hello World1.0

    对于从未接触过OSG的我来说,首先需要一个入门教程.在OSG论坛逛了半天,再加上google,最终决定使用<OSG程序设计>这本书. 下面就贴出书中的第一个例子:Hello World. ...

  5. M - Little Pony and Harmony Chest 状压dp

    M - Little Pony and Harmony Chest 怎么感觉自己越来越傻了,都知道状态的定义了还没有推出转移方程. 首先这个a的范围是0~30   这里可以推出 b数组的范围 0~60 ...

  6. 王颖奇 20171010129《面向对象程序设计(java)》第十五周学习总结

    实验十五  GUI编程练习与应用程序部署 实验时间 2018-12-6 学习总结: 理论部分: ◼ JAR文件◼ 应用程序首选项存储◼ Java Web Start JAR文件: 1.Java程序的打 ...

  7. 【杂谈】Disruptor——RingBuffer问题整理(一)

    纯CAS为啥比加锁要快? 同样是修改数据,一个采用加锁的方式保证原子性,一个采用CAS的方式保证原子性. 都是能够达到目的的,但是常用的锁(例如显式的Lock和隐式的synchonized),都会把获 ...

  8. 这份书单会告诉你,Java网络编程其实很重要

  9. go 函数 方法 接口

    概论 函数 方法 接口 概论 方法在编译时静态绑定,依托于具体的类型 接口对应的方法是在运行时动态绑定 进程内初始化顺序 初始化导入包的常量和变量(可以导出的变量)--->包的init函数,不同 ...

  10. 一个小例子学习makefile

    前言 makefile推荐资料为陈皓的跟我一起写makefile,需要pdf资源的可以私我 正文 目录结构 ---include ------student.h ---src ------studen ...