ConcurrentHashMap中引入了分段锁的概念,可以理解为将一个大的Map拆分成N个小的Hashtable(通过synchronized保证线程安全),被称为segments,根据key.hashCode来决定把key放到哪个Hashtable中。对于操作同一segment的两个线程,后一个 ...
分类:
其他好文 时间:
2018-12-18 00:01:24
阅读次数:
183
关于重写equals为什么需要重写hashCode请参考https://www.cnblogs.com/wang-meng/p/7501378.html 附未重写时的方法来源,但是很奇怪,java Object中并没有eq,只有equals ...
分类:
其他好文 时间:
2018-12-17 02:30:02
阅读次数:
183
哈希值这个应该都听过,并且用于hashMap, hashSet, HashTable.后面对这三个进行详细说明。 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法: 根据这个方法的声明可知,该方法返回一个int类型的数值 ...
分类:
编程语言 时间:
2018-12-16 12:22:37
阅读次数:
187
变量值的共享可以使用public static的形式,所有的线程都使用同一个变量。如果每个线程都有自己的共享变量,就可以使用ThreadLocal。比如Hibernat的session问题就是存在ThreadLoca中。 类ThreadLocal主要解决的就是每个线程绑定自己的值,可以将Thread ...
分类:
其他好文 时间:
2018-12-15 23:51:30
阅读次数:
202
一 Java中的值传递和引用传递(非常重要) 首先要明确的是:“对象传递(数组、类、接口)是引用传递,原始类型数据(整型、浮点型、字符型、布尔型)传递是值传递。” 那么什么是值传递和应用传递呢? 值传递是指对象被值传递,意味着传递了对象的一个副本,即使副本被改变,也不会影响源对象。(因为值传递的时候 ...
分类:
编程语言 时间:
2018-12-11 19:49:30
阅读次数:
162
def convert_n_bytes(n, b): bits = b * 8 return (n + 2 ** (bits - 1)) % 2 ** bits - 2 ** (bits - 1) def convert_4_bytes(n): return convert_n_bytes(n, 4... ...
分类:
其他好文 时间:
2018-12-10 18:25:23
阅读次数:
136
底层实现:ArrayList<Object>[]链表数组 先用hashcode找到元素所在链表位置, 再遍历链表通过equals()比较对应元素,避免冲突。 java各种比较方式: hashCode()默认(Object)返回地址(地址相同肯定是同一对象) equals()默认比较地址是否相等 == ...
分类:
其他好文 时间:
2018-12-08 21:19:05
阅读次数:
168
Collection 一、List 有序,可重复 1.ArrayList 底层数据结构是数组,查询快,增删慢。线程不安全,效率高 2.Vector 底层数据结构是数组,查询快,增删慢。线程安全,效率低 3.LinkedList 底层数据结构是链表,查询慢,增删快。线程不安全,效率高 二、Set 无序 ...
分类:
其他好文 时间:
2018-12-08 17:03:53
阅读次数:
158
1. SimHash与传统hash函数的区别 传统的Hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上仅相当于伪随机数产生算法。传统的hash算法产生的两个签名,如果原始内容在一定概率下是相等的;如果不相等,除了说明原始内容不相等外,不再提供任何信息,因为即使原始内容只相差一个字节, ...
分类:
编程语言 时间:
2018-12-08 17:02:30
阅读次数:
234
Set接口:无序集合,不允许有重复值,允许有null值 存入与取出的顺序有可能不一致 HashSet:具有set集合的基本特性,不允许重复值,允许null值 底层实现是哈希表结构 初始容量为16 保存自定义对象时,保证数据的唯一性,主要由哈希表的结构决定 先判断hashCode()是否相同,若相同, ...
分类:
编程语言 时间:
2018-12-02 22:35:35
阅读次数:
220