java基础之hashcode理解及hashmap实现原理及MD5
HashCode值
HashMap实现原理
一致性哈希
6.为什么String, Interger这样的wrapper类适合作为键?
String, Interger这样的wrapper类是final类型的,具有不可变性,而且已经重写了equals()和hashCode()方法了。其他的wrapper类也有这个特点。不可变性是必要的,因为为了要计算hashCode(),就要防止键值改变,如果键值在放入时和获取时返回不同的hashcode的话,那么就不能从HashMap中找到你想要的对象。
7.ConcurrentHashMap和Hashtable的区别
Hashtable和ConcurrentHashMap有什么分别呢?它们都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间。因为ConcurrentHashMap引入了分割(segmentation),不论它变得多么大,仅仅需要锁定map的某个部分,而其它的线程不需要等到迭代完成才能访问map。简而言之,在迭代的过程中,ConcurrentHashMap仅仅锁定map的某个部分,而Hashtable则会锁定整个map。
8.HashMap的遍历
第一种:
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
}
效率高,以后一定要使用此种方式!
第二种:
Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object val = map.get(key);
}
效率低,以后尽量少使用!
可是为什么第一种比第二种方法效率更高呢?
HashMap这两种遍历方法是分别对keyset及entryset来进行遍历,但是对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,它把key和value都放到了entry中,即键值对,所以就快了。
1.HashMap与Hashtable的区别:
HashMap可以接受null键值和值,而Hashtable则不能。
Hashtable是线程安全的,通过synchronized实现线程同步。而HashMap是非线程安全的,但是速度比Hashtable快。
5.如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办
HashMap默认的负载因子大小为0.75,也就是说,当一个map填满了75%的空间的时候,和其它集合类(如ArrayList等)一样,将会创建原来HashMap大小的两倍的数组,来重新调整map的大小,并将原来的对象放入新的数组中。
下文转自http://www.cnblogs.com/eternalwt/archive/2013/03/21/2973807.html 感谢作者
1.在软件开发的用户注册功能中常出现MD5加密这个概念,这个概念有一定的误导性。严格来说:MD5还有sha-1、 RIPEMD以及Haval等不能算是加密算法(虽然常用于把密码变成“密文”),他们只是散列算法,或者叫摘要算法。加密对应解密这个概念,加密算法包括:DES、3DES、IDEA、 RSA、AES等。
2.MD5还有sha-1、 RIPEMD以及Haval等不能算是加密算法,只是散列算法,或者叫摘要算法。
2.MD5还有sha-1、 RIPEMD以及Haval等不能算是加密算法,只是散列算法,或者叫摘要算法。
2.MD5还有sha-1、 RIPEMD以及Haval等不能算是加密算法,只是散列算法,或者叫摘要算法。
3.加密对应解密这个概念,加密算法包括:DES、3DES、IDEA、 RSA、AES等。
3.加密对应解密这个概念,加密算法包括:DES、3DES、IDEA、 RSA、AES等。
3.加密对应解密这个概念,加密算法包括:DES、3DES、IDEA、 RSA、AES等。
4.MD5算法除了注册时对用户密码进行MD5运算以外,还常用于验证下载的软件的完整性
5.MD5算法除了注册时对用户密码进行MD5运算以外,还常用于验证下载的软件的完整性
6.MD5运算后的长度是固定的,它显然不可能包含视频、软件等源数据的全部信息。对于加密算法来说,加密后的密文是包含原始数据所有信息的,只是不能被直接读懂变的安全了。
7.MD5运算后的长度是固定的,它显然不可能包含视频、软件等源数据的全部信息。对于加密算法来说,加密后的密文是包含原始数据所有信息的,只是不能被直接读懂变的安全了。
4.要弄懂这两类算法的区别,最本质的方式就是把这两类算法的步骤搞懂,但这需要大量的时间。通过两类算法的表现可以对他们的区别有个大体的了解:
1.MD5算法除了注册时对用户密码进行MD5运算以外,还常用于验证下载的软件的完整性(linux下面md5sum命令可以支持这一典型应用),常用电驴等下载视频和软件的用户应该知道这一点。
MD5运算后的长度是固定的,它显然不可能包含视频、软件等源数据的全部信息。对于加密算法来说,加密后的密文是包含原始数据所有信息的,只是不能被直接读懂变的安全了。
MD5运算后的长度是固定的,它显然不可能包含视频、软件等源数据的全部信息。对于加密算法来说,加密后的密文是包含原始数据所有信息的,只是不能被直接读懂变的安全了。
6. 2.加密算法是一种通信体系,经常用于分布式系统。它的目标是数据经过传输后只能被特定的有密钥的人读懂,包含加密算法和密钥2个要素。而MD5等散列算法却不包含运算后的数据只能被特定人读懂的目标,它只让机器读懂。当用于加密时,它加密后的数据对所有人一视同仁,且没有密钥机制,没有好的方法从加密后的数据得到原始数据,从而保证数据的安全。它并不是通信机制,它是不可逆的。另外它的验证数据完整性的功能上面已经提到,我想,很多有心人最初正是从这一点意识到这两类算法的区别把?
7. 2.加密算法是一种通信体系,经常用于分布式系统。它的目标是数据经过传输后只能被特定的有密钥的人读懂,包含加密算法和密钥2个要素。而MD5等散列算法却不包含运算后的数据只能被特定人读懂的目标,它只让机器读懂。当用于加密时,它加密后的数据对所有人一视同仁,且没有密钥机制,没有好的方法从加密后的数据得到原始数据,从而保证数据的安全。它并不是通信机制,它是不可逆的。另外它的验证数据完整性的功能上面已经提到,我想,很多有心人最初正是从这一点意识到这两类算法的区别把?
8.很多编程人员为了将“密码”不明示,就对密码串进行md5散列,在数据库或文件中保存md5编码;但是,千万要注意,真正到了鉴别用户身份是否合法的时候,不是通过早先记录下来的md5编码生成原文再与用户当场输入的密码串进行比较,而是将用户当场输入的密码串也实施md5变换,比较的是前后两次生成的md5编码串。
希望这个科学常识对大家有用,不要再试图从md5编码揣测原文了
8.很多编程人员为了将“密码”不明示,就对密码串进行md5散列,在数据库或文件中保存md5编码;但是,千万要注意,真正到了鉴别用户身份是否合法的时候,不是通过早先记录下来的md5编码生成原文再与用户当场输入的密码串进行比较,而是将用户当场输入的密码串也实施md5变换,比较的是前后两次生成的md5编码串。
希望这个科学常识对大家有用,不要再试图从md5编码揣测原文了
java基础之hashcode理解及hashmap实现原理及MD5的更多相关文章
- Java 基础:hashCode方法
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 一.前言 泥瓦匠最近被项目搞的天昏地暗.发现有些要给自己一些目标,关于技术的目标: 专注很重要.专注J ...
- Java基础教程:HashTable与HashMap比较
Java基础教程:HashTable与HashMap比较 1. 关于HashMap的一些说法: a) HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体.HashMap的底层结 ...
- Java基础之hashCode方法具体解释
想要明确hashCode的作用,必须要先知道java中的集合.(不明确的请看Java基础之集合框架具体解释(二)List篇和Java基础之集合框架具体解释(三)Set篇) Java中的Collecti ...
- Java基础之深入理解Class对象与反射机制
深入理解Class对象 RRIT及Class对象的概念 RRIT(Run-Time Type Identification)运行时类型识别.在<Thinking in Java>一书第十四 ...
- Java基础之集合框架——使用HashMap地图(TryPhoneBook1)
控制台程序. 首先改进Peron类,使Person可以在地图中用作键,进而存储电话簿中的项.必须添加equals()方法并重写默认的hashCode()方法. import java.io.*; pu ...
- java基础 (一)之HashMap
HashMap的存储结构是由数组和链表共同完成.Entry<K,V>[] ,Entry是单向链表. 1 HashMap数据结构 HashMap的底层主要是基于数组和链表来实现的,它之所以有 ...
- Java基础:hashCode与equals个人学习记录
摘要: 本文主要记录本人对hashCode和对equals两个知识点的学习过程. 从学生时期初学java,就知道hashCode和equals这两个方法,工作中equals方法使用也是特别频繁,要说e ...
- Java基础系列-深入理解==和equals的区别(一)
一.前言 说到==和equals的问题,面试的时候可能经常被问题到,有时候如果你真的没有搞清楚里边的原因,被面试官一顿绕就懵了,所以今天我们也来彻底了解一下这个知识点. 二.==和equals的作用 ...
- Java 基础:认识&理解关键字 native 实战篇
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 泥瓦匠初次遇见 navicat 是在 java.lang.Object 源码中的一个hashCode方 ...
随机推荐
- 使用SQL语句查询某表中所有的主键、唯一索引以及这些主键、索引所包含的字段(转)
SELECT 索引名称 = a.name , 表名 = c.name , 索引字段名 = d.name , 索引字段位置 = d.colid FROM sysindexes a JOIN sysind ...
- Linux下堆漏洞的利用机制
1.保护机制 )) malloc_printerr (check_action, "corrupted double-linked list", P); 这个就是所谓的堆指针的ch ...
- Java之反转排序
顾名思义,反转排序就是以相反的顺序把原来的数组内容重新进行排序.反转排序算法在我们的程序开发中也是经常用到的.而反转排序的基本思想也很简单,就是把数组最后一个元素与第一个元素进行交换,倒数第二个与第二 ...
- shell在linux里摇摇晃晃
1.shell不只是一种解释器,还是一种编程工具 查看系统中可用的shell,linux默认使用 Bash Shell [root@localhost ~]# cat /etc/shells /bin ...
- 制作Label标签文件时,使用convert_imageset.exe的注意事项
当前的convert_imageset.exe版本做了一下修改 //status = ReadImageToDatum(root_folder + lines[line_id].first, //li ...
- bzoj [SDOI2009]学校食堂Dining
感觉这个状压dp比较难想.. dp[ i ][ s ][ k ] 表示前i - 1个都排好了, 从i开始的7个的取没取的状态为s, 且最后一个相对i的位置为k的最少花费. 状态转移方程 if(s &a ...
- thinkphp3.2自动生成模块BIND_MODULE
thinphp3.2中提供了自定义生成模块与控制器的常量,分别是BIND_MODULE,BUILD_CONTROLLER_LIST 在 index.php 文件中定义 BIND_MODULE,BUIL ...
- [js]正则篇
一.正则基本概念 1.一种规则.模式.文本处理工具 2.强大的字符串匹配工具 3.在js中常与字符串函数配合使用 二.js正则写法 正则在js中以正则对象存在: (1)var re=new RegEx ...
- [POI2000]病毒 --- AC自动机
[POI2000]病毒 题目描述: 二进制病毒审查委员会最近发现了如下的规律: 某些确定的二进制串是病毒的代码. 如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的. 现在委员会已经找 ...
- Hdu4903 The only survival
The only survival Time Limit: 40000/20000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Ot ...