hashmap

ConcurrentHashMap源码详解(与HashMap/HashTable的比较)

前提是你 提交于 2020-01-19 09:33:00
先看看速度比HashTable快又比HashMap线程安全的------当红明星ConcurrentHashMap具体使用方法: 非常的平淡无奇,跟HashMap和HashTable好像是一样东西。 但是,ConcurrentHashMap其实是融合了HashMap/HashTable这两种Hash表数据结构的优点。我们看源码可以知道: HashTable全部操作方法都是用Java 中自带的synchronized锁强制做同步达到线程安全的,不管是get还是put还是其他一些方法。 而HashMap就没考虑那么多,它的方法中全部没做线程安全锁处理。具体详细的HashMap介绍请看另外一篇博文: https://blog.csdn.net/whiteBearClimb/article/details/103946465 因此我们可以得出结论就是HashMap速度快但是线程不安全;HashTable速度慢但是线程安全。 ConcurrentHashMap就是融合它们二者各自的优点。既是线程安全的,速度又相对能较快。那么是怎么实现的呢?看源码: 继续进去ConcurrentMap看看什么个东西 这些毫无疑问没啥好讲的,我们再看看它最常用的几个方法有什么不同点。 Get方法: Put方法: 这里如果有仔细看过HashMap代码的人瞬间就恍然大悟了,没看过的打开:::https://blog

java面试题大全-基础方面

我只是一个虾纸丫 提交于 2020-01-19 03:53:23
Java基础方面: 1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时默认为friendly 2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4、&和&&的区别 答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答

Map以及HashMap

一笑奈何 提交于 2020-01-18 23:44:23
  本文主要介绍 java集合框架的 Map集合,在日常生活中 Map的运用也十分广泛。   与 List集合、 Set集合隶属于 Collection不同, Map是一个独立的接口,与 Collection相同级别的接口。   重要的是, Map集合提供了一个不一样的元素存储方法,利用“ key— value”的形式进行存储。其中,每个键映射一个值。而在 Set集合中,元素的存储就是利用 Map的这一特性来实现。   简单的介绍了下 Map集合,接下来,就让笔者对其主要实现类 HashMap、 TreeMap、 HashTable进行详细的说明。 1 Map常用方法 具体介绍之前,我们先了解下Map接口本身,一边了解所有实现的共同点。 1 public interface Map<K,V> { 2 3 //返回Map中的key--value的数目 4 int size(); 5 6 //如果Map不包含任何key--value,则返回 true 7 boolean isEmpty(); 8 9 //如果Map中包含指定key的映射,则返回true 10 boolean containsKey(Object key); 11 12 //如果此Map将一个或多个键映射到指定值,则返回 true 13 boolean containsValue(Object value); 14 15

Redis原理详解

寵の児 提交于 2020-01-18 21:20:07
Redis原理详解 数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject最主要的信息如上图所示:type 代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value存 储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串 的,当然前提是这个字符串本身可以用数值表示,比如:"123" "456"这样的字符串。 这里需要特殊说明一下vm字段,只有打开了Redis的虚拟内存功能,此字段才会真正的分配内存,该功能默认是关闭状态的,该功能会在后面具体描 述。通过上图我们可以发现Redis使用redisObject来表示所有的key/value数据是比较浪费内存的,当然这些内存管理成本的付出主要也 是为了给Redis不同数据类型提供一个统一的管理接口,实际作者也提供了多种方法帮助我们尽量节省内存使用,我们随后会具体讨论。

leetcode-两数之和

↘锁芯ラ 提交于 2020-01-18 05:36:47
class Solution { public int[] twoSum(int[] nums, int target) { HashMap<Integer,Integer> map = new HashMap<>(); for(int i=0;i<nums.length;i+=1){ int num = nums[i]; if(map.get(target-num)!=null){ return new int[]{map.get(target-num),i}; } else{ map.put(num,i); } } return new int[]{0,0}; } } 这道题直接使用hashmap 即可 来源: CSDN 作者: dogndaxiaodong 链接: https://blog.csdn.net/weixin_41327340/article/details/103788384

HashMap

*爱你&永不变心* 提交于 2020-01-17 18:22:18
public class HashMap < K , V > extends AbstractMap < K , V > implements Map < K , V > , Cloneable , Serializable HashMap 继承了AbstractMap类,实现了Map,Cloneable,Serializeable三个接口。 static final int MAXIMUM_CAPACITY = 1 << 30 ; //最大容量2的30次方,因为这是整数型的最大范围 static final float DEFAULT_LOAD_FACTOR = 0.75f ; //默认负载因子为0.75 //当链表数组的容量超过初始容量的0.75时,将链表数组扩大2倍,把原链表搬移到新的数组中 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4 ; //初始容量为16 在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。 为什么是8

NPE while using HashMap to populate ListView

百般思念 提交于 2020-01-17 04:56:09
问题 I am creating an android app for a restaurant that lets the waiters take the customers orders. I am using a extended list view to show the menu and have used a hashmap to populate the extended list view. When I run the app, there are no errors but the app crashes when trying to open the activity with the extended list view on it. After debugging, I found that there were null pointer exceptions causing it to crash but I'm struggling to fix it. Below is my code: Menu activity: public class Menu

Collecting the result of cypher query into a hash map java?

社会主义新天地 提交于 2020-01-17 03:29:31
问题 This is a followup of Finding connected nodes question. The code is firstNode = graphDb.createNode();//creating nodes firstNode.setProperty( "person", "Andy " ); Label myLabel = DynamicLabel.label("person"); firstNode.addLabel(myLabel); ... relationship = firstNode.createRelationshipTo( secondNode, RelTypes.emails );// creating relationships relationship.setProperty( "relationship", "email " );.... ExecutionEngine engine = new ExecutionEngine(graphDb); ExecutionResult result = engine.execute(

Get object name of a class from the user in Java

自闭症网瘾萝莉.ら 提交于 2020-01-17 03:09:08
问题 I want the user to enter the name of the object to be used in the code. For example, if I have a class public class Person{ ....... } now instead of me creating an object with a specific name like Person student; I want the user to enter the name for the object maybe like teacher, and then an object teacher of the class person will be created. I do not know if this is even possible in java, many of the solutions I looked up were using a map, but the explanations were not clear enough for me

Java面试题技术类一

柔情痞子 提交于 2020-01-17 00:40:38
1、面向对象编程的三大特性是什么? (1).继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继 承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增 加新的方法使之更适合特殊的需要。 (2).封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 (3).多态: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据这个String类提供了数值不可改变字符串而这个StringBuffer类提供的字符串进行修改当你知道字符数据要改变的时候你就可以使用StringBuffer典型地,你可以使用StringBuffers来动态构造字符数据 3、说出ArrayList,Vector,