博客
关于我
Java : 类集框架 (Map 接口概述) (HashMap + Hashtable)
阅读量:91 次
发布时间:2019-02-26

本文共 2673 字,大约阅读时间需要 8 分钟。

文章目录

Map 接口

public interface Map<K, V>

Collection 集合的特点是每次进行单个对象的保存, 那么如果现在要进行一对对象的保存(偶对象), 就只能是使用 Map 集合的完成, 所以Map 集合中会一次性的保存两个, 两个对象的关系 : key -> value 的结构, 那么这种结构最大的特点是可以通过key找到对应的value 内容.

Map 接口里面的常用方法

方法名称 类型 描述
1 public V put(K key, V value) 普通 向集合中追加数据
2 public V get(Object key) 普通 根据 key 取得对应的 value, 如果没有 返回 null
3 public Set<`K> keySet() 普通 取得所有 key 的信息, 返回set 类型, 则表示不能重复
4 public Collection<`V> values() 普通 取得所有 value 的信息, 返回Collection 类型, 则表示不关注重复与否
5 public Set<Map.Entry<K,V>> entrySet() 普通 将Map集合变为Set集合

Map 本身是一个接口, 要使用Map必须使用子类进行对象的实例化, 而子类有如下几个常用的:

  1. HashMap
  2. Hashtable
  3. TreeMap : 用于排序
  4. ConcurrentHashMap

HashMap 子类 (90%) (无序)

HashMap 是在使用Map 集合中最为常用的子类了, 下面先通过观察Map的使用操作:

范例: Map 基本处理

package com.beyond.nothing;import java.util.*;public class test {       public static void main(String[] args) {           Map
map = new HashMap
(); map.put(1, "Hello"); map.put(1, "World"); // key 重复 map.put(2, "World2"); System.out.println(map); System.out.println(map.get(1)); // 根据 key 取得数据// System.out.println(map.get(99)); // null //取得Map中所有key的值和value的值, 这种输出操作只是一种娱乐, 实际并不会使用 Set
set = map.keySet(); // 取得所有的Key信息 Iterator
iter = set.iterator(); while (iter.hasNext()){ Integer key = iter.next(); System.out.println(key +"= "+map.get(key)); } }}

此种输出操作没有任何的实际意义, 只是为了对其做一个功能使用的说明, 因为这样的输出操作复杂度太高: N*N 的复杂度

面试题: 请解释 HashMap 原理

在数据量小的时候, HashMap 是按照链表模式存储的. 当数据量变大之后, 为了进行我们快速的查找, 那么我们会将这个链表变为红黑树(均衡二叉树), 用 hash 码作为数据的定位, 来进行保存.

Hashtable 子类 (1%)

JDK 1.0 提供有三大主要类: Vector, Enumeration, Hashtable.

Hashtable 是最早实现这种元偶对象数据结构, 后期设计的时候也让其于 Vector 类一样多实现了 Map 接口而已.

范例: 观察 Hashtable (无序)

package com.beyond.nothing;import java.util.*;public class test {       public static void main(String[] args) {           Map
map = new Hashtable<>(); map.put(1, "Hello"); map.put(1, "World"); // key 重复 map.put(2, "World2"); System.out.println(map); System.out.println(map.get(1)); // 根据 key 取得数据 //取得Map中所有key的值, 这种输出操作只是一种娱乐, 实际并不会使用 Set
set = map.keySet(); // 取得所有的Key信息 Iterator
iter = set.iterator(); while (iter.hasNext()){ Integer key = iter.next(); System.out.println(key +"= "+map.get(key)); } }}

HashMap 与 Hashtable 区别

  1. Hashtable 不允许值为空 (NPE)
  2. HashMap 可以设置

在这里插入图片描述

在这里插入图片描述

面试题: 请解释 HashMap 与 Hashtable 的区别

区别 HashMap Hashtable
推出版本 JDK 1.2 JDK 1.0
性能 异步处理, 性能高 同步处理处理, 性能相对较低
安全性 非线程安全 线程安全
存放 null 允许存储null Key 和 Value 都不允许为 null, 否则出现 NullPointerException

以后使用的时候多使用 HashMap

在这里插入图片描述

转载地址:http://boyk.baihongyu.com/

你可能感兴趣的文章
Nginx配置http跳转https
查看>>
Nginx配置ssl实现https
查看>>
nginx配置ssl证书https解决公网ip可以访问但是域名不行的问题
查看>>
Nginx配置TCP代理指南
查看>>
NGINX配置TCP连接双向SSL
查看>>
Nginx配置——不记录指定文件类型日志
查看>>
nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
查看>>
nginx配置中的服务器名称
查看>>
Nginx配置代理解决本地html进行ajax请求接口跨域问题
查看>>
nginx配置全解
查看>>
Nginx配置参数中文说明
查看>>
Nginx配置后台网关映射路径
查看>>
nginx配置域名和ip同时访问、开放多端口
查看>>
Nginx配置多个不同端口服务共用80端口
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置如何一键生成
查看>>
Nginx配置实例-动静分离实例:搭建静态资源服务器
查看>>
Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中
查看>>
Nginx配置实例-反向代理实现浏览器请求Nginx跳转到服务器某页面
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>