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的更多相关文章

  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. IIS 搭网站(一)

    搭建类型win+IIs+asp+access(一) 第一步首先保证虚拟机的系统软盘是连接状态,如下图状态即可 第二步: 第三步: 第四步: 第五步: 第六步:这个时候就会自动搜索软盘里面的数据自动安装 ...

  2. Flutter 系统是如何实现ExpansionPanelList的

    老孟导读:Flutter组件有一个很大的特色,那就是很多复杂的组件都是通过一个一个小组件拼装而成的,今天就来说说系统的ExpansionPanelList是如何实现的. 在了解ExpansionPan ...

  3. Datasource Server returns invalid timezone问题

    今天在学习一个项目的时候,idea中的datasource没有配置,后来发现mysql没有连接,于是下载了最新版的jdbc.jar包,连接mysql完成后,想test一下mysql connect,结 ...

  4. C. Two Arrays(思维DP或组合数学)

    \(首先很容易想到一个O(n^4m)的DP\) \(设dp\ [i]\ [j]\ [q]\ 为长度i,a数组以j结尾,b数组以q结尾(q>=j)\) for(int i=1;i<=n;i+ ...

  5. 你应该知道的Python3.6、3.7、3.8新特性

    很多人在学习了基本的Python语言知识后,就转入应用阶段了,后期很少对语言本身的新变化.新内容进行跟踪学习和知识更新,甚至连已经发布了好几年的Python3.6的新特性都缺乏了解. 本文列举了Pyt ...

  6. [hdu5319]二进制表示,简单模拟

    题意:给一个矩形,矩形里面画了4种符号,'.'表示没画线,'R'表示画了红线,'B'表示画了蓝线,'G'表示红线和蓝线同时画了,并且矩形主对角线上只能画红线,副对角线上只能画蓝线,问最少画多少条线才能 ...

  7. 重要的serialVersionUID

    所有序列化的DO都需要加上 serialVersionUID 否则未来可能就有一个坑在等着你 当你需要修改序列化的实体累的时候 之前缓存内容反序列化就会失败,如果这个缓存很多个地方都在存取 使用 那么 ...

  8. 2018-06-18 Javascript 基础1

    js是一门基于对象的若类型语言,他和JAVA没有关系: js标签放置位置:1.内联 2.外部 3.内部: js代码是有执行顺序的,这点和css代码有所区别:当对象没有加载完或者还没加载的情况下js代码 ...

  9. 高性能MySQL之索引深入原理分析

    一.背景 我们工作中经常打交道的就是索引,那么到底什么是索引呢?例如,当一个SQL查询比较慢的时候,你可能会说给“某个字段加个索引吧”之类的解决方案. 总的来说索引的出现其实就是为了提高数据查询的效率 ...

  10. docker+headless+robotframework+jenkins实现web自动化持续集成

    在Docker环境使headless实现web自动化持续集成 一.制作镜像 原则:自动化测试基于基础制作镜像 命令:docker run --privileged --name=$1 --net=ho ...