Map接口之HashMap,LinkedHashMap,TreeMap
Map与Collection 并列存在,用于保存具有映射关系的数据:Key-Value
Map中的Key和Value都可以是任何引用类型的数据
Map中的Key用Set存放,不允许重复,即同一个Map对象所对应的类,须重写HashCode()和equals()方法
常用String类作为Map的 "键"
Key和vlaue之间存在单项一对一关系,即通过指定的Key总能找到唯一的,确定的value
TestMap
- package com.aff.coll;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.util.Collection;
- import java.util.Comparator;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.LinkedHashMap;
- import java.util.Map;
- import java.util.Properties;
- import java.util.Set;
- import java.util.TreeMap;
- import org.junit.Test;
- /*
- Collection接口
- Map接口
- |----HashMap:Map的主要实现类
- |----LinkedHashMap:使用链表维护添加进 Map 中的顺序.故遍历map时,是按添加的顺序遍历的
- |----TreeMap: 按照添加进Map中的元素的 key 的指定属性进行排序,要求key必须是同一个类对象
- 自动排序 vs 定制排序
- |----Hashtable :①古老的Map实现类,线程安全,不允许使用null作为key和value
- ②和HashMap一样不能保证其中key-value对的顺序
- ③判断两个key相等,两个value相等的标准和HashMap一致
- ④太古老,标识符的table还是小写的,不建议使用
- |---- Properties :常用来处理属性文件。键和值都为String类型的
- */
- public class TestMap {
- //使用Properties处理属性文件
- @Test
- public void testProperties() throws FileNotFoundException, IOException{
- Properties pros = new Properties();
- pros.load(new FileInputStream(new File("jdbc.properties")));
- String user = pros.getProperty("user");
- System.out.println(user);//root;
- String password = pros.getProperty("password");
- System.out.println(password);//123ab;
- }
- /* Map常用方法:
- Object put(Objet key,Object value); 向Map中添加一个元素
- Object remove(Object key); 按照指定的key删除此key-value
- void putAll(Map t);
- void clear(); 清空
- Object get(Object key); 获取指定key的value值,若无此key,则返回null
- boolean ontainsKey(Object key);
- boolean containsValue(Object value);
- int size(); 返回集合的长度
- boolean isEmpty();
- boolean equals(Object obj);
- */
- //HashMap
- /*
- 1.HashMap :key使用Set来存放的,不可重复,Value是用collection来存放的,
- 可重复的一个key-value对,是一个Entry.所有的Entry是用Set存放的,也是不可重复的。
- 2.向HashMap中添加元素时,会调用key所在的类的equals()方法,判断两个key是否相同,
- 若相同,则只能添加进后添加的那个元素
- */
- @Test
- public void testHashMap() {
- Map map = new HashMap();
- map.put("AA", 12);
- map.put("BB", 143);
- map.put("BB", 4656);
- map.put(123, "VV");
- map.put(null, null);
- System.out.println(map.size());//
- }
- //遍历Map
- @Test
- public void testHashMap2() {
- /*
- 如何遍历Map
- Set KeySet();
- Collection values();
- Set entrySet();
- */
- Map map = new HashMap();
- map.put("AA", 12);
- map.put("BB", 143);
- map.put(123, "VV");
- map.put(null, null);
- map.put(new Person("DD", 23), 46);
- //1.遍历key集
- Set set = map.keySet();
- for(Object obj: set){
- System.out.println(obj);
- }
- System.out.println("----");
- //2.遍历value集
- Collection values = map.values();
- Iterator iterator = values.iterator();
- while(iterator.hasNext()){
- System.out.println(iterator.next());
- }
- //3.遍历key-value对
- //方式一:
- Set set1 = map.keySet();
- for(Object obj : set1){
- //Object get(Object key); 获取指定key的value值,若无此key,则返回null
- System.out.println(obj+"----->"+map.get(obj));
- }
- System.out.println("------");
- //方式二:
- Set set2 = map.entrySet();
- for(Object obj:set2){
- Map.Entry entry = (Map.Entry)obj;
- System.out.println(entry.getKey()+"---->"+entry.getValue());
- }
- }
- //LinkedHashMap 使用链表维护添加进 Map 中的顺序.故遍历map时,是按添加的顺序遍历的
- @Test
- public void testLinkedHashMap(){
- Map map = new LinkedHashMap();
- map.put("AA", 12);
- map.put("BB", 143);
- map.put(123, "VV");
- map.put(null, null);
- map.put(new Person("DD", 23), 46);
- System.out.println(map);
- }
- //TreeMap 的自然排序
- @Test
- public void testTreeMap(){
- Map map = new TreeMap();
- map.put(new Person("AA", 23), 46);
- map.put(new Person("CC", 22), 68);
- map.put(new Person("GGG", 33), 26);
- map.put(new Person("BB", 14), 98);
- map.put(new Person("CC", 14), 98);
- // System.out.println(map);
- Set set1 = map.keySet();
- for(Object obj : set1){
- //Object get(Object key); 获取指定key的value值,若无此key,则返回null
- System.out.println(obj+"----->"+map.get(obj));
- }
- }
- //TreeMap 的定制排序
- @Test
- public void testTreeMap2(){
- Comparator com = new Comparator() {
- @Override
- public int compare(Object o1, Object o2) {
- if(o1 instanceof Customer && o2 instanceof Customer){
- Customer c1 = (Customer)o1;
- Customer c2 = (Customer)o2;
- int i = c1.getId().compareTo(c2.getId());
- if(i == 0){
- return c1.getName().compareTo(c2.getName());
- }
- return i;
- }
- return 0;
- }
- };
- Map map = new TreeMap();
- map.put(new Person("AA", 23), 46);
- map.put(new Person("CC", 22), 68);
- map.put(new Person("GGG", 33), 26);
- map.put(new Person("BB", 14), 98);
- map.put(new Person("CC", 14), 98);
- // System.out.println(map);
- Set set1 = map.keySet();
- for(Object obj : set1){
- //Object get(Object key); 获取指定key的value值,若无此key,则返回null
- System.out.println(obj+"----->"+map.get(obj));
- }
- }
- }
- jdbc.properties
- user=root;
- password=123ab;
Customer, Person与上篇相同
Map接口之HashMap,LinkedHashMap,TreeMap的更多相关文章
- Java中HashMap,LinkedHashMap,TreeMap的区别[转]
原文:http://blog.csdn.net/xiyuan1999/article/details/6198394 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类 ...
- Java HashMap,LinkedHashMap,TreeMap
Java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMapMap主要用于存储健值对,根据 ...
- Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法
Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...
- HashMap,LinkedHashMap,TreeMap对比
共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...
- java HashMap,LinkedHashMap,TreeMap应用
共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...
- Java集合(十)实现Map接口的HashMap
Java集合(十)继承Map接口的HashMap 一.HashMap简介(基于JDK1.8) HashMap是基于哈希表(散列表),实现Map接口的双列集合,数据结构是“链表散列”,也就是数组+链表 ...
- map,set,list等集合解析以及HashMap,LinkedHashMap,TreeMap等该选谁的的区别
前言: 今天在整理一些资料时,想起了map,set,list等集合,于是就做些笔记,提供给大家学习参考以及自己日后回顾. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允 ...
- Map接口,Map.Entry,hashMap类,TreeMap类,WeakHashMap。
Collection接口之前接触过,每次保存的对象是一个对象,但是在map中保存的是一对对象,是以key->value形式保存的. 定义: public interface Map<K,V ...
随机推荐
- unittest 管理用例生成测试报告
# 登录方法的封装 from appium import webdriver from time import sleep from python_selenium.Slide import swip ...
- ubuntu16.04安装FastDFS-5.08
fastdfs github地址: https://github.com/happyfish100/ 1.FastDFS上传原理 - storage定时向tracker上传状态信息 - client上 ...
- andorid jar/库源码解析之Butterknife
目录:andorid jar/库源码解析 Butterknife: 作用: 用于初始化界面控件,控件方法,通过注释进行绑定控件和控件方法 栗子: public class MainActivity e ...
- OSG程序设计之Hello World1.0
对于从未接触过OSG的我来说,首先需要一个入门教程.在OSG论坛逛了半天,再加上google,最终决定使用<OSG程序设计>这本书. 下面就贴出书中的第一个例子:Hello World. ...
- M - Little Pony and Harmony Chest 状压dp
M - Little Pony and Harmony Chest 怎么感觉自己越来越傻了,都知道状态的定义了还没有推出转移方程. 首先这个a的范围是0~30 这里可以推出 b数组的范围 0~60 ...
- 王颖奇 20171010129《面向对象程序设计(java)》第十五周学习总结
实验十五 GUI编程练习与应用程序部署 实验时间 2018-12-6 学习总结: 理论部分: ◼ JAR文件◼ 应用程序首选项存储◼ Java Web Start JAR文件: 1.Java程序的打 ...
- 【杂谈】Disruptor——RingBuffer问题整理(一)
纯CAS为啥比加锁要快? 同样是修改数据,一个采用加锁的方式保证原子性,一个采用CAS的方式保证原子性. 都是能够达到目的的,但是常用的锁(例如显式的Lock和隐式的synchonized),都会把获 ...
- 这份书单会告诉你,Java网络编程其实很重要
- go 函数 方法 接口
概论 函数 方法 接口 概论 方法在编译时静态绑定,依托于具体的类型 接口对应的方法是在运行时动态绑定 进程内初始化顺序 初始化导入包的常量和变量(可以导出的变量)--->包的init函数,不同 ...
- 一个小例子学习makefile
前言 makefile推荐资料为陈皓的跟我一起写makefile,需要pdf资源的可以私我 正文 目录结构 ---include ------student.h ---src ------studen ...