• Map接口

Map为一个接口。实现Map接口的类都有一个特点:有键值对,将键映射到值的对象。 Map不能包含重复的键,每个键可以映射到最多一个值。

Map常见的接口方法有:

V  put(K key, V value)   将指定的值与该映射中的指定键相关联(注意,返回值是指被覆盖的value值)

V  remove(Object key)    如果存在(从可选的操作),从该地图中删除一个键的映射

boolean    containsKey(Object key)    如果此映射包含指定键的映射,则返回 true

boolean    containsValue(Object value)    如果此地图将一个或多个键映射到指定的值,则返回 true

Collection<V>    values()    返回此地图中包含的值的Collection视图。

int    size()    返回此地图中键值映射的数量

V    get(Object key)    返回到指定键所映射的值,或 null如果此映射包含该键的映射

Set<K>    keySet()    返回此地图中包含的键的Set视图

Set<Map.Entry<K,V>>    entrySet()     返回此地图中包含的映射的Set视图

示例1:(遍历Map集合,思路:先获取到键的集合,遍历集合,get方法取出值)

public class Test11 {
// Map集合没有生成Iterator的方法,所以要用以下方法遍历
public static void main(String[] args) {
HashMap<String,Integer> hm = new HashMap<>();
hm.put("张三",13);
hm.put("李四",14);
hm.put("王五",15);
Set<String> set = hm.keySet();
/*方式1:
Iterator<String> it = set.iterator();
while (it.hasNext()){
String s = it.next();
Integer i = hm.get(s);
System.out.println(s + "=" + i);
}*/ // 方式2:
for (String s : set) {
Integer i = hm.get(s);
System.out.println(s + "=" + i);
}
}
}

示例2:(遍历Map集合,思路:把键值对作为一个对象存进集合,遍历集合,取出对象的属性)

public class Test12 {
public static void main(String[] args) {
HashMap<String,Integer> hm = new HashMap<>();
hm.put("张三",13);
hm.put("李四",14);
hm.put("王五",15);
Set<Map.Entry<String,Integer>> set = hm.entrySet(); /*方式1:
Iterator<Map.Entry<String,Integer>> it = set.iterator();
while (it.hasNext()){
Map.Entry<String,Integer> entry = it.next();
System.out.println(entry.getKey() + "=" + entry.getValue());*/ // 方式2:
for (Map.Entry<String,Integer> entry: set) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
}
}
  • HashMap类

上面的接口方法基本都是HashMap实现的。所以用起来基本一样,不多说。同样的,LinkedHashMap类继承HashMap类,用法基本一样,只是LinkedHashMap底层用了链表实现而已。

  • TreeMap类

可以看做能排序的HashMap。原理其实和TreeSet一样......

关于排序可以参考TreeSet类:https://www.cnblogs.com/chichung/p/10252495.html

  • Hashtable类

Hashtable与HashSet的关系和ArrayList与Vector的关系几乎一样。

  • 共同点:

底层都是哈希算法,都是双列集合

  • 区别:

1.HashMap是线程不安全的,效率高,JDK1.2版本出现的

Hashtable是线程安全的,效率低,JDK1.0版本出现的

2.HashMap可以存储null键和null值

Hashtable不可以存储null键和null值

java中的Map集合的更多相关文章

  1. Java中遍历Map集合的四种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  2. Java中的map集合顺序如何与添加顺序一样

    一般使用map用的最多的就是hashmap,但是hashmap里面的元素是不按添加顺序的,那么除了使用hashmap外,还有什么map接口的实现类可以用呢? 这里有2个,treeMap和linkedH ...

  3. 在java中获取Map集合中的key和value值

  4. Map java中的map 如何修改Map中的对应元素

    Map java中的map 如何修改Map中的对应元素 Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象.         Map的接口         Map ...

  5. Java中Set Map List 的区别

    java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...

  6. Java Collection、Map集合总结

    1.Java中的Collection集合总结 Collection |---List(存储有序,可重复) |---ArrayList 底层数据结构是数组,查询快,增删慢. 线程不安全.效率高 |--- ...

  7. 黑马程序员——JAVA基础之Map集合

    ------- android培训.java培训.期待与您交流! ---------- Map集合: 该集合存储键值对.一对一对往里存.而且要保证键的唯一性. 和Set很像,其实Set底层就是使用了M ...

  8. JAVA中关于Map的九大问题

    通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的.下面就以K和V来代表键和值,来说明一下java中关于Map的九大问题. 0.将Map转换为List类型 在java中Map接口提 ...

  9. Java开发知识之Java中的Map结构

    Java开发知识之Java中的Map结构 一丶Map接口 Map没有实现Collection接口,提供的是Key 到Value的映射. Map中.不能包含相同的Key,每个Key只能映射一个Value ...

随机推荐

  1. C++中友元简介

    本文基于<C++ Primer(第五版)>,纯属个人笔记整理.若有错误欢迎大家留言指出. 一.为什么要用友元和其缺点? 采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员 ...

  2. 【简单算法】40.Fizz Buzz

    题目: 写一个程序,输出从 到 n 数字的字符串表示. . 如果 n 是3的倍数,输出“Fizz”: . 如果 n 是5的倍数,输出“Buzz”: .如果 n 同时是3和5的倍数,输出 “FizzBu ...

  3. HTTP的消息结构?

    参考:http://www.runoob.com/http/http-messages.html (1)请求数据包结构: 第一部分:请求行(数据包的第一行内容)[GET/HTTP/1.1] 请求行包含 ...

  4. Change FZU - 2277 毒瘤啊 毒瘤题目

    There is a rooted tree with n nodes, number from 1-n. Root’s number is 1.Each node has a value ai. I ...

  5. C#学习之泛型

    //主函数//主函数里面调用的类都在后面有具体描述 using System; using System.Collections.Generic; using System.Linq; using S ...

  6. ZooKeeper管理员指南——部署与管理ZooKeeper

    1.部署 本章节主要讲述如何部署ZooKeeper,包括以下三部分的内容: 系统环境 集群模式的配置 单机模式的配置 系统环境和集群模式配置这两节内容大体讲述了如何部署一个能够用于生产环境的ZK集群. ...

  7. iostat和iowait详细解说

    简单的说,sar -u看出来的cpu利用率iowait 不实用,iostat -x 中的 svctm   和util 参数 命令形式: iostat -x 1 每隔一秒输出下 其中的svctm参数代表 ...

  8. Java并发多线程 - 并发工具类JUC

    安全共享对象策略 1.线程限制 : 一个被线程限制的对象,由线程独占,并且只能被占有它的线程修改 2.共享只读 : 一个共享只读的对象,在没有额外同步的情况下,可以被多个线程并发访问, 但是任何线程都 ...

  9. 51nod 1873 高精度计算

    JAVA BigDecimal import java.util.*; import java.math.*; public class Main { public static void main( ...

  10. 图论:LCA-树上倍增

    BZOJ1602 求最近公共祖先有三种常用的方法,在线的有两种,分别是树上倍增算法和转化为RMQ问题 离线的有一种,使用Tarjan算法 这里,我们介绍复杂度优异并且在线的倍增算法,至于后续的两种方法 ...