HashMap:

    java.lang.Object

      java.util.AbstractMap<K,V>
       ∟ java.util.HashMap<K,V>

  类型参数:

  K - 此映射所维护的键的类型
  V - 所映射值的类型
  public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

  HashMap是基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

HashTable:

    java.lang.Object
       ∟java.util.Dictionary<K,V>
           ∟java.util.Hashtable<K,V>

  类型参数:

  K - 此映射所维护的键的类型
  V - 所映射值的类型
       public class Hashtable<K,V>extends Dictionary<K,V>implements Map<K,V>, Cloneable, Serializable

  HashTable将键映射到相应的值。任何非 null 对象都可以用作键或值。

HashMap与HashTable:

  HashTable 继承了Dictionary,是线程安全的,键值对中不能出现 null.

HashMap 实现了 Map接口,是HashTable的轻量级实现(非线程安全的实现),即多个线程访问HashMap时需要为其准备外同步,且Hashmap的键、值可以为空。

遍历Map有两种方式:keySet(效率低)、entrySet(效率高),两种方式都需要创建Iterator迭代器对象,但创建方式有所不同。

keySet():返回值是Map中的key值的集合

entrySet():返回值是set集合, 集合类型为Map.Entry

Demo:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry; public class Test1 {
public static void main(String[] args){
ArrayList<Double> arr1 = new ArrayList<Double>();
arr1.add(1.23);
arr1.add(2.21);
arr1.add(4.59); // 迭代器方式遍历list
Iterator<Double> iterator = arr1.iterator();
while(iterator.hasNext()){
System.out.print(iterator.next()+" ");
}
System.out.println(); 
System.out.println("----------分界线---------");
Double arr2[] = arr1.toArray(new Double[0]); // list转数组方式遍历list
for(int i=0;i<arr2.length;i++){
System.out.print(arr2[i]+" ");
}
System.out.println();
System.out.println("----------分界线---------");
HashSet<Double> set1 = new HashSet<Double>();
set1.add(2.25);
set1.add(3.78);
set1.add(9.54); // 迭代器方式遍历set
Iterator<Double> iterator1 = set1.iterator();
while(iterator1.hasNext()){
System.out.print(iterator1.next()+" ");
}
System.out.println();
System.out.println("----------分界线---------"); // set转数组方式遍历set
Double arr3[] = set1.toArray(new Double[0]);
for(int i=0;i<arr3.length;i++){
System.out.print(arr3[i]+" ");
}
System.out.println();
System.out.println("----------分界线---------");
HashMap<Character,Integer> map1 = new HashMap<Character,Integer>();
HashMap<String,Integer> map2 = new HashMap<String,Integer>();
map1.put('d', 5);
map1.put('t', 9);
map1.put('p',13);
map2.put(Character.toString('a'), 1);
map2.put("aa", 2);
map2.put("aaa", 3); // 迭代器中的entrySet方式遍历HashMap
Iterator<Entry<Character,Integer>> iterator3 = map1.entrySet().iterator();
while(iterator3.hasNext()){
Map.Entry<Character, Integer> entry = iterator3.next();
System.out.print(entry.getKey()+":"+entry.getValue()+" ");
}
System.out.println();
System.out.println("----------分界线---------"); // 迭代器中的KeySet方式遍历HashMap
Iterator<String> iterator4 = map2.keySet().iterator();
while(iterator4.hasNext()){
String s = iterator4.next();
System.out.print(s+":"+map2.get(s)+" ");
}
System.out.println();
System.out.println("----------分界线---------");
System.out.println(map2.containsKey("aa"));
System.out.println(map2.containsValue(2));
}
}

运行结果:

1.23 2.21 4.59
----------分界线---------
1.23 2.21 4.59
----------分界线---------
2.25 3.78 9.54
----------分界线---------
2.25 3.78 9.54
----------分界线---------
p:13  d:5  t:9 
----------分界线---------
aa:2  aaa:3  a:1 
----------分界线---------
true
true

浅谈Java中的Hashmap的更多相关文章

  1. 【转】浅谈Java中的hashcode方法(这个demo可以多看看)

    浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native i ...

  2. 【转】浅谈Java中的hashcode方法

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个 ...

  3. 浅谈Java中的hashcode方法(转)

    原文链接:http://www.cnblogs.com/dolphin0520/p/3681042.html 浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地 ...

  4. 浅谈Java中set.map.List的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...

  5. Java基础学习总结(29)——浅谈Java中的Set、List、Map的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...

  6. 浅谈Java中的equals和==(转)

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...

  7. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  8. 浅谈Java中的equals和==

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...

  9. 浅谈Java中的深拷贝和浅拷贝(转载)

    浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...

随机推荐

  1. Scala_单例对象

    在 Scala 中,是没有 static 这个东西的,但是它也为我们提供了单例模式的实现方法,那就是使用关键字 object. 对象的无参构造器在第一次使用时被调用,且单例对象没有有残构造器. Enu ...

  2. Verilog_Day2_Plus

    内容为书中第4章 等式运算符 “==” 与 “===” 的区别 Verilog中存在4种等式运算符: == (等于); != (不等于); === (等于); !== (不等于). “==”与&quo ...

  3. 2017-2018-1 20155315 《信息安全系统设计基础》嵌入式C语言测试

    Hours 要求 伪代码 提取Hours 提取时间地址 时间存放在(基址+2)的16位寄存器中,定义一个时间宏存放地址. #define Time_Addr 0xFFFFC0000 #define T ...

  4. BSGS算法总结

    BSGS算法总结 \(BSGS\)算法(Baby Step Giant Step),即大步小步算法,用于解决这样一个问题: 求\(y^x\equiv z\ (mod\ p)\)的最小正整数解. 前提条 ...

  5. 【python3】酷狗音乐及评论回复下载

    新年快乐,上班第一天分享一个python源码,功能比较简单,就是实现酷狗音乐的音乐文件(包含付费音乐)和所有评论回复的下载. 以 米津玄師 - Lemon 为例, 以下为效果图: 1.根据关键词搜索指 ...

  6. 二维码Aztec简介及其解码实现(zxing-cpp)

    Aztec Code是1995年,由Hand HeldProducts公司的Dr. Andrew Longacre设计.它是一种高容量的二维条形码格式.它可以对ASCII和扩展ASCII码进行编码.当 ...

  7. Python day1 ---python基础1

    本节内容 Python介绍 编程语言分类 Hello World程序 变量 字符编码 用户输入 数据类型初识 表达式if ...else语句 表达式while 循环 表达式for 循环 break a ...

  8. 【CF617D】Roads in Yusland

    [CF617D]Roads in Yusland 题面 蒯的洛谷的 题解 我们现在已经转化好了题目了,戳这里 那么我们考虑怎么求这个东西,我们先判断一下是否所有的边都能被覆盖,不行的话输出\(-1\) ...

  9. [转载]如何用Visual Studio制作安装包

    原文地址:如何用Visual Studio制作安装包作者:蓝羽幽游 环境:Microsoft Visual Studio 2010 语言:C# 构架:.NET Framework 2.0 解决方案名称 ...

  10. 【oracle】oracle常用命令汇总

    查看数据库状态(普通用户登录要保证数据库是open状态) SQL> select status from v$instance; 创建用户(新用户需要授予连接权限才能连上数据库) SQL> ...