浅谈Java中的Hashmap
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的更多相关文章
- 【转】浅谈Java中的hashcode方法(这个demo可以多看看)
浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native i ...
- 【转】浅谈Java中的hashcode方法
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个 ...
- 浅谈Java中的hashcode方法(转)
原文链接:http://www.cnblogs.com/dolphin0520/p/3681042.html 浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地 ...
- 浅谈Java中set.map.List的区别
就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...
- Java基础学习总结(29)——浅谈Java中的Set、List、Map的区别
就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- 浅谈Java中的深拷贝和浅拷贝(转载)
浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...
随机推荐
- [shell]关闭超时的进程
应同事要求,写了个shell, 主要功能为查找超时的进程,并关闭! 调用方式: shell_sheep : 为进程名 30 : 为30分钟 从打印的日志能看出会多两个PID,不要惊慌,由于你执行时会 ...
- 20155237 2016-2017-2 《Java程序设计》第4周学习总结
20155237 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 继承符合DRY原则. extends UML 多态: 继承可以复用代码, ...
- Linux命令学习笔记2(mysql安装和mysql-python安装)
linux下 强制安装 rpm安装包(切换到root用户): rpm -ivh bluefish-shared-data-2.2.7-1.el6.noarch.rpm --nodeps --forc ...
- 【转载】COM 组件设计与应用(五)——用 ATL 写第一个组件
原文:http://vckbase.com/index.php/wv/1215.html 一.前言 1.如果你在使用 vc5.0 及以前的版本,请你升级为 vc6.0 或 vc.net 2003: 2 ...
- Caffe中Layer注册机制
Caffe内部维护一个注册表用于查找特定Layer对应的工厂函数(Layer Factory的设计用到了设计模式里的工厂模式).Caffe的Layer注册表是一组键值对(key, value)( La ...
- idea web项目debug模式实时更新按钮不生效原因
必须两个都开启才能生效,单按按钮不能生效,但是有时候自动更新不生效的时候按按钮后可以生效, 如果前端目录或后端内容实在不更新,就删掉out目录和target目录,重新启动服务器即可
- C#时间间隔
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); stop ...
- 单元测试——隔离神器:mockito
mockito,一个让人着迷的单元测试隔离框架.对比了easymock,jmock,jmockito,最终选择了它. 为什么用他 接口语法简洁.自然.写起来像在说话,很舒服. 文档更完整.让学习曲线更 ...
- lua编程之协程介绍
一,lua协程简介 协程(coroutine),意思就是协作的例程,最早由Melvin Conway在1963年提出并实现.跟主流程序语言中的线程不一样,线程属于侵入式组件,线程实现的系统称之为抢占式 ...
- 年薪30W的软件测试“老司机”工作经验
这几天,新入职的小MM提议“老司机”们把自己这些年的软件测试工作经验跟大家分享一下,让新同学学习学习,利用空闲时间我整理了一些,可能不全,勉强看看,这也算是对自己这些年的工作总结. 测试阶段划分 1. ...