博客
关于我
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/

你可能感兴趣的文章
NIO基于UDP协议的网络编程
查看>>
NIO笔记---上
查看>>
Vue3.0中的响应式原理(第九课)
查看>>
NIO蔚来 面试——IP地址你了解多少?
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
NISP国家信息安全水平考试,收藏这一篇就够了
查看>>
NIS服务器的配置过程
查看>>
NIS认证管理域中的用户
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NiuShop开源商城系统 SQL注入漏洞复现
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP、CV 很难入门?IBM 数据科学家带你梳理
查看>>
NLP三大特征抽取器:CNN、RNN与Transformer全面解析
查看>>