Map接口实现Collection接口,是集合三大接口之一。

  Map接口在声明:public interface Map<K,V>;将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值,如果一个键映射到多个值,其前面映射的值将会被后面映射的值所覆盖,其映射关系的实现类主要是HasgMap和TreeMap类,HashMap的映射实现不保存顺序,TreeMap的映射实现,可明确保证其顺序。

1.HashMap

HashMap声明:

 public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable

  HashMap类是基于哈希表(数组和链表)Map接口的实现,允许使用null键和mull值,非同步,线程不安全,其大致与Hashtable相同,此类不保证映射的顺序,及顺序不能恒久不变。其默认构造方法构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap,也就是当数组容量达到总容量的75%,数组要进行扩充,则要对该哈希表进行 rehash 操作,即重建内部数据结构(哈希表的重新散列)。哈希表保存对象时,根据键(K)对象的hashcode对HashMap此时总容量求余,以确定该键值对代表的映射关系存在数组的哪一个位置,之后在该位置的其他映射关系将以链表的形式存放。

 package com.test;

 import java.util.HashMap;
import java.util.Map;
import java.util.Set; public class HashMapDemo {
public static void hashMap(){
Map<Integer, String> hashmap = new HashMap<>();
hashmap.put(1, "string1");
hashmap.put(2, "string2");
hashmap.put(3, "string3");
hashmap.put(3, "string4");//注意相同键值下的映射关系的覆盖
hashmap.put(null, "string3");
hashmap.put(null, "string4");
/*
* null为作为键时,继续保持键的唯一性(键中只能出现一次),若键有多个映射值,则最后一个映射值覆盖前面的映射值
* null作为值时与键有唯一性,可多次使用
*/
System.out.println("null为键时得到的值:"+hashmap.get(null));
hashmap.put(4, null);//关联键值对
hashmap.put(5, null);
System.out.println("null作为值时返回:"+hashmap.get(5));
/*
* HashMap的遍历
* keySet()返回此映射所包含的所有键的Set视图
*/
System.out.println("******HashMap的遍历******");
Set<Integer> h = hashmap.keySet();
for (Integer i : h) {
System.out.println(hashmap.get(i));
}
}
public static void main(String[] args) {
hashMap();
}
}

运行结果:

 null为键时得到的值:string4
null作为值时返回:null
******HashMap的遍历******
string4
string1
string2
string4
null
null

2.Hashtable

Hashtable声明:

 public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, Serializable
  此类实现一个哈希表,该哈希表将键映射到相应的值。任何非null 对象都可以用作键或值,同步,线程安全,键具有唯一性,同一键值的映射关系后面的赋值会覆盖前面相同键对应的值,其他与HashMap类似。
 package com.test;

 import java.util.Hashtable;
import java.util.Set;
/*
* Hashtable类似于HashMap
* 线程安全,键值对任何一方不能使用null值
*/
public class HashtableDemo {
public static void main(String[] args) {
Hashtable<String,String> hashtable = new Hashtable<>();
hashtable.put("1", "manu1");
hashtable.put("2", "manu2");
hashtable.put("3", "manu3");
// hashtable.put(null, "manu3");//报错
// hashtable.put("4", null);
hashtable.put("3", "manu5");
Set<String> set = hashtable.keySet();
for (String s : set) {
System.out.println(hashtable.get(s));
}
}
}
运行结果:
manu5
manu2
manu1

3.TreeMap

TreeMap类的声明:

 public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, Serializable

  TreeMap是基于红黑树实现,是一种平衡二叉树,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法,非同步,线程不安全,相较HashMap速率稍慢。

 package com.test;

 import java.util.Iterator;
import java.util.Map.Entry;
import java.util.TreeMap; /*
* 基于红黑树实现,又叫平衡二叉树
* 自定义对象作为键时 ,必须实现comparator接口
* 以自然顺序或按照compareto方法规定排序
* 键的唯一性
*/
public class TreeMapDemo {
public static void main(String[] args) {
TreeMap<String,Test> treemap = new TreeMap<>();
Test t1 = new Test(1,"manu1",10);
Test t2 = new Test(2,"manu2",20);
Test t3 = new Test(3,"manu3",30);
treemap.put("a", t1);
treemap.put("a", t2);//Map中键值对的键都具有唯一性,会覆盖前面的
treemap.put("b", t3);
System.out.println(treemap.get("a"));
System.out.println(treemap.get("b"));
/*
* entrySet()
* 返回此映射中包含的映射关系的 Set视图,就是获取键值对对象集合
* 而keySet()返回此映射中包含的键的Set视图 ,就是获取该集合中的K集合
*/
System.out.println("******Iterator******");
Iterator<Entry<String, Test>> i = treemap.entrySet().iterator();
while(i.hasNext()){
System.out.println(i.next());
}
} }
运行结果:
id=2, name=manu2, age=20
id=3, name=manu3, age=30
******Iterator******
a=id=2, name=manu2, age=20
b=id=3, name=manu3, age=30

 

关于Map集合的更多相关文章

  1. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  2. Java常用的几种集合, Map集合,Set集合,List集合

    Java中  Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...

  3. Map集合

    1:Map (1)将键映射到值的对象. 一个映射不能包含重复的键:每个键最多只能映射到一个值. 键值对的方式存在 (2)Map和Collection的区别? A:Map 存储的是键值对形式的元素,键唯 ...

  4. MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法 和sql片段)(三)

    一.字段名与属性名(数据库的名字)不一样怎么办? 方案一:在小配置中配置一个resultMapper <!--方案一:resultMapper 字段名与属性名不一致 --> <res ...

  5. Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、

    特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣)                       ...

  6. java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)

    import java.util.*; public class Person implements Comparable<Person>//使Person的属性具有比较性 { priva ...

  7. Java集合类学习笔记(Map集合)

    Map用于保存具有映射关系的数据,因此Map集合里保存着两组数据,一组用于保存Map的key,一组用于保存key所对应的value. Map的key不允许重复. HashMap和Hashtable都是 ...

  8. java学习第18天(map集合)

    Map集合是将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 存储的是键值对形式的元素,键唯一,值可以重复,有点类似于数据库中的主键加数据.主要功能有: A:添加功能 put ...

  9. Map集合 总结

    (本人第一次写博客,部分内容有参照李刚老师的疯狂java系列图书,如有遗漏错误,请多指教,谢谢.) Java的集合类可分为Set.List.Map.Queue,其中Set.List.Queue都有共同 ...

  10. Map集合的应用及其遍历方式

    ---> HashMap :底层基于哈希表      存储原理也使用哈希表来存放的:            往HashMap添加了元素 ,首先会调用键的hashCode方法 获得一个哈希值,然后 ...

随机推荐

  1. 关于python数据序列化的那些坑

    -----世界上本来没那么多坑,python更新到3以后坑就多了 无论哪一门语言开发,都离不了数据储存与解析,除了跨平台性极好的xml和json之外,python要提到的还有自身最常用pickle模块 ...

  2. dubbo配置

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...

  3. Delphi之通过代码示例学习XML解析、StringReplace的用法

    这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <?xml version="1.0" encoding=&q ...

  4. 解决文件上传插件Uploadify在火狐浏览器下,Session丢失的问题

    因为在火狐浏览器下Flash发送的请求不会带有cookie,所以导致后台的session失效. 解决的方法就是手动传递SessionID到后台. $("#fileresultfiles&qu ...

  5. Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备三)

    接下来,我们将继续分析UIlib.h文件中其他的文件, UIContainer.h, UIRender.h, WinImplBase.h, UIManager.h,以及其他布局.控件等: 1. UIR ...

  6. 10201启动时候报ORA-27125

    [ora10g@oracle ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Thu Feb 26 18:46 ...

  7. asp.net core的TagHelper简单使用

    TagHelper(标签助手)是ASP.NET Core非常好的一种新特性.可以扩展视图,让其看起来像一个原生HTML标签. 应该使用TagHelper替换HtmlHelper,因其更简洁更易用,且支 ...

  8. UWP学习记录2-设计和UI之布局

    UWP学习记录2-设计和UI之布局 1.导航基础知识 应用里,多个页面会有层次关系或者对等关系.这两种关系,通常在一个复杂应用里都会存在,而关系的选定依据: 对于对等导航,一般用选项卡(tabs)或者 ...

  9. HTTPS和HTTP的区别(转)

    HTTPS和HTTP的区别 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信 息.HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器 ...

  10. Eclipse '/RemoteSystemsTempFiles'错误

    错误代码 Could not write metadata for '/RemoteSystemsTempFiles'.D:\workspace4.5\.metadata\.plugins\org.e ...