hash

3.java中的数据结构

喜夏-厌秋 提交于 2020-02-04 18:09:12
java中关于数据结构的工具类,暂时就这么称呼吧,其实也贼拉多,害看图包 上面的图肯定时不全,知识一些常用的。简单看一下上面列举出来的“工具类”的源码和一些常见的面试问题: List接口中的“工具类”,是一个有序集合,可以重复。 ArrayList: 底层使用数组实现的,数据是有序数据(插入的顺序),具有索引查找比较快,线程不安全。 属性: //默认容量 private static final int DEFAULT_CAPACITY = 10; //空集合 private static final Object[] EMPTY_ELEMENTDATA = {}; //默认空集合 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; //数据存储数组,不参与序列化 transient Object[] elementData; //容量 private int size; //最大容量 private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; 构造方法: /* *指定长度的构造方法 */ public ArrayList(int initialCapacity) { if (initialCapacity > 0) {

前端路由原理及vue-router介绍

送分小仙女□ 提交于 2020-02-04 15:01:52
前端路由原理本质就是监听 URL 的变化,然后匹配路由规则,显示相应的页面,并且无须刷新。目前单页面使用的路由就只有两种实现方式 hash history www.test.com/##/ 就是 Hash URL,当 ## 后面的哈希值发生变化时,不会向服务器请求数据,可以通过 hashchange 事件来监听到 URL 的变化,从而进行跳转页面。 vue-router hash实现源码(完整源码访问https://github.com/vuejs/vue-router/blob/dev/src/history/hash.js#L22-L54): ** * 添加 url hash 变化的监听器 */ setupListeners () { const router = this.router /** * 每当 hash 变化时就解析路径 * 匹配路由 */ window.addEventListener('hashchange', () => { const current = this.current /** * transitionTo: * 匹配路由 * 并通过路由配置,把新的页面 render 到 ui-view 的节点 */ this.transitionTo(getHash(), route => { replaceHash(route.fullPath) }) })

[go]map源码

混江龙づ霸主 提交于 2020-02-04 11:36:54
map数据结构概述 map 的设计也被称为 “The dictionary problem”, 它的任务是设计一种数据结构用来维护一个集合的数据, 并且可以同时对集合进行增删查改的操作。 map最主要的数据结构有两种: 哈希查找表(Hash table) 查找表用一个哈希函数将 key 分配到不同的桶(bucket,也就是数组的不同 index) 开销主要在哈希函数的计算以及数组的常数访问时间。在很多场景下,哈希查找表的性能很高。 哈希查找表最差是 O(N), 平均查找效率是 O(1) 遍历哈希查找表则是乱序的 解决冲突的办法: 链表法和开放地址法 搜索树(Search tree) 一般采用自平衡搜索树,包括:AVL 树,红黑树(c++)。 自平衡搜索树法的最差搜索效率是 O(logN) 遍历自平衡搜索树,返回的 key 序列,一般会按照从小到大的顺序 注: Go 语言采用的是哈希查找表,并且使用链表解决哈希冲突。 hash函数 hash函数,有加密型和非加密型。 加密型的一般用于加密数据、数字摘要等,典型代表就是md5、sha1、sha256、aes256这种; 非加密型的一般就是查找。在map的应用场景中,用的是查找。选择hash函数主要考察的是两点:性能、碰撞概率。 golang使用的hash算法根据硬件选择,如果cpu支持aes,那么使用aes hash

hashtable和hashmap

旧时模样 提交于 2020-02-04 07:59:00
1.hashtable和hashmap    [1]这两个结构都采用数组+链表实现,称作hashmap是因为它的每一个元素是一个key-value对。   [2]hashtable是线程安全的,它的每个方法中都加入了Synchronize方法,意思是多线程时可以直接调用提供的方法,而不用在外部进行加锁同步。    hashmap不是线程安全的,因此多线程时必须在外部加锁进行同步。   [3]hashtable不支持null key和null value。    hashmap支持null key和null value。null key只能有一个,null value可以作为正常的value。当get()方法返回null时,可能该key对应的value就是null,因此不能用get()来判断是否存在某个key,而应该用containsKey()啦判断。   [4]hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。    hashmap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。   [5]创建时,如果给定了容量初始值,那么Hashtable会直接使用你给定的大小,而HashMap会将其扩充为2的幂次方大小。也就是说Hashtable会尽量使用素数、奇数。而HashMap则总是使用2的幂作为哈希表的大小。之所以会有这样的不同

HashMap与HashTable的区别

a 夏天 提交于 2020-02-04 07:58:44
(仅列出重要的) 1,Hashtable既不支持Null key也不支持Null value;   HashMap中,null可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为null。 2,Hashtable是线程安全的,它的每个方法中都加入了Synchronize方法。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现同步   HashMap不是线程安全的,在多线程并发的环境下,可能会产生死锁等问题。   虽然HashMap不是线程安全的,但是它的效率会比Hashtable要好很多。这样设计是合理的。在我们的日常使用当中,大部分时间是单线程操作的。HashMap把这部分操作解放出来了。当需要多线程操作的时候可以使用线程安全的ConcurrentHashMap。       ConcurrentHashMap虽然也是线程安全的,但是它的效率比Hashtable要高好多倍。因为ConcurrentHashMap使用了分段锁,并不对整个数据进行锁定。 3,Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。   创建时,如果给定了容量初始值,那么Hashtable会直接使用你给定的大小,而HashMap会将其扩充为2的幂次方大小

HashMap 和 HashTable差别

别等时光非礼了梦想. 提交于 2020-02-04 07:53:31
代码版本 JDK每一版本都在改进。本文讨论的HashMap和HashTable基于JDK 1.7.0_67。源码见这里 1. 时间 HashTable产生于JDK 1.1,而HashMap产生于JDK 1.2。从时间的维度上来看,HashMap要比HashTable出现得晚一些。 2. 作者 以下是HashTable的作者: 以下代码及注释来自java.util.HashTable * @author Arthur van Hoff * @author Josh Bloch * @author Neal Gafter 以下是HashMap的作者: 以下代码及注释来自java.util.HashMap * @author Doug Lea * @author Josh Bloch * @author Arthur van Hoff * @author Neal Gafter 可以看到HashMap的作者多了大神Doug Lea。不了解Doug Lea的,可以看这里。 3. 对外的接口(API) HashMap和HashTable都是基于哈希表来实现键值映射的工具类。讨论他们的不同,我们首先来看一下他们暴露在外的API有什么不同。 3.1 Public Method 下面两张图,我画出了HashMap和HashTable的类继承体系,并列出了这两个类的可供外部调用的公开方法。

HashMap和HashTable到底哪不同?

♀尐吖头ヾ 提交于 2020-02-04 07:45:38
          HashMap和HashTable有什么不同?在面试和被面试的过程中,我问过也被问过这个问题,也见过了不少回答,今天决定写一写自己心目中的理想答案。 /*--> */ /*--> */ 代码版本 JDK每一版本都在改进。本文讨论的HashMap和HashTable基于JDK 1.7.0_67。 1. 时间 HashTable产生于JDK 1.1,而HashMap产生于JDK 1.2。从时间的维度上来看,HashMap要比HashTable出现得晚一些。 2. 作者 以下是HashTable的作者: 以下代码及注释来自java.util.HashTable* @author Arthur van Hoff* @author Josh Bloch* @author Neal Gafter 以下是HashMap的作者: 以下代码及注释来自java.util.HashMap* @author Doug Lea* @author Josh Bloch* @author Arthur van Hoff* @author Neal Gafter 可以看到HashMap的作者多了大神Doug Lea。不了解Doug Lea的,可以看https://en.wikipedia.org/wiki/Doug_Lea。 3. 对外的接口(API)

hashmap与hashtable区别

做~自己de王妃 提交于 2020-02-04 07:44:11
0.继承不同,HashMap继承AbstractMap,HashTable继承Dictionary 1.HashMap是非synchronized的,HashTable则是同步的 由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。 2.HashMap可以接受null(HashMap可以接受为null的键值(key)和值(value) ——其实是第一个原因的果,而Hashtable则不行)。 public synchronized V put(K key, V value) { // Make sure the value is not null if (value == null) { throw new NullPointerException(); } 3.HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove(

java并发之hashmap

假装没事ソ 提交于 2020-02-04 07:30:01
在Java开发中经常会使用到hashmap,对于hashmap又了解多少,经常听到的一句话是hashmap是线程不安全的,那为什么是线程不安全的,如何才能保证线程安全,JDK又给我们提供了那些线程安全的类,这些问题是今天讨论的问题, 一、hashmap为什么线程不安全 说到hashmap为什么线程不安全,首先要理解线程安全的定义。简单来讲,指的就是两个以上的线程操作同一个hashmap对象,不会发生资源争抢,hashmap中的数据不会错乱。根据以上的说法,我们大体上看下hashmap的源码,分析下其常用方法put、get的源码。 1、hashmap定义(基于JDK1.8) 经常使用hashmap的方式如下, HashMap map1=new HashMap(); 使用最简单粗暴的方式创建一个HashMap的对象,那么在底层是如何创建的,查看源码如下, /** * Constructs an empty <tt>HashMap</tt> with the default initial capacity * (16) and the default load factor (0.75). */ public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted 根据上面的提示

Java hashtable和hastmap的区别

强颜欢笑 提交于 2020-02-04 07:23:19
1、 继承和实现区别    Hashtable是基于陈旧的Dictionary类 ,完成了Map接口;HashMap是Java 1.2引进的Map接口的一个实现( HashMap继承于AbstractMap ,AbstractMap完成了Map接口)。   2、 线程安全不同    HashTable的方法是同步的,HashMap是未同步 ,所以在多线程场合要手动同步HashMap。   3、 对null的处理不同    HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以) 。即 HashTable不允许null值其实在编译期不会有任何的不一样,会照样执行,只是在运行期的时候Hashtable中设置的话回出现空指针异常。 HashMap允许null值是指可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断 。   4、 方法不同   HashTable有一个 contains(Object value),功能和containsValue(Object value)功能一样 。   5、