哈希函数
1.输入域无穷大,输出有限
例如MD5:长度为16,每位上有16种状态
2.哈希函数输入相同,输出相同;输入不同,输出也可能相同(即哈希冲突)。
3.输出域上每一个点厚度是均匀增长的。
例如:字符串100位S,输出域只有3点M(1,2,3),输出的结果在(1,2,3)上均匀分布,S MOD(1,2,3)
哈希表
每一个数通过哈希函数进行处理的出的结果Mod10(假设分10个文件),在0~9上均匀分布,放入哈希表中
存放的都是有序表,增删改查可以认为是O(1)(通过离线技术实现,类似volatile,且扩容概率很小)
扩容:数量翻一倍,原有函数重新处理,复杂度O(n);
HashMap
是一个散列表,继承于AbstractMap。HashMap 的实现不是同步的,意味着不是线程安全的。它的key、value都可以为null。
hashMap在单线程中使用大大提高效率,在多线程的情况下使用hashTable来确保安全。Map接口未实现Collection接口,使用Iterator
hashTable中使用synchronized关键字来实现安全机制,但是synchronized是对整张hash表进行锁定即让线程独享整张hash表,在安全同时造成了浪费。concurrentHashMap采用分段加锁的机制来确保安全,使用Enumeration
Vector:Vector支持线程的同步,也就是内部加锁的
ArrayList:ArrayList 是线程序不安全的,不是同步的。ArrayList删除一个元素后,剩余元素会依次向前移动。当需要增长时,Vector默认增长为原来一倍,而ArrayList却是原来的50%,这样ArrayList就有利于节约内存空间。
如果涉及到堆栈,队列等操作,应该考虑用Vector,如果需要快速随机访问元素,应该使用ArrayList 。
一致性哈希: