hashmap

面试(二)

陌路散爱 提交于 2020-01-09 18:51:32
4.介绍一下java的数据结构,然后手写一个栈的类 主要可以分为两类: 1)Java中定义了一个接口collection,用来存储一个元素集合 2)另一种是定义了映射(map)用来存储键/值对。 Collection接口为线性表(list)、向量(vector)、栈(stack)、队列(queue)、优先队列(priority queue)以及规则集(set)定义了通用的操作 Set(规则集) 用于存储一组不重复的元素。 重要的实现类: HashSet 。 List(线性表) 用于存储一个有序元素的集合(允许重复)。两个重要的实现类: ArrayList (数组线性表类)和 LinkedList (链表类)。 Stack(栈) 用于存储采用后进先出方式处理的对象。 Queue(队列) 用于采用先进先出方式处理的对象。不过队列用双向链表 LinkedList 实现更好 PriorityQueue用于存储按照优先级顺序处理的对象。 map(映射)是一个存储“键/值对”集合的容器对象。键很像索引,在List中,索引是整数;在Map中,键可以是任意类型的对象。映射中不能有重复的键,每个键都对于一个值。 线性表、栈、队列、优先队列: ArrayList、LinkedList 都是线程不安全的 。 vector是线程安全的。 ArrayList :用数组存储元素。这个数组是动态创建的

HashMap 扩容 加载因子

北战南征 提交于 2020-01-09 15:41:41
HashMap: public HashMap(int initialCapacity, float loadFactor) { //初始容量不能<0 if (initialCapacity < 0) throw new IllegalArgumentException("Illegal initial capacity: " + initialCapacity); //初始容量不能 > 最大容量值,HashMap的最大容量值为2^30 if (initialCapacity > MAXIMUM_CAPACITY) initialCapacity = MAXIMUM_CAPACITY; //负载因子不能 < 0 if (loadFactor <= 0 || Float.isNaN(loadFactor)) throw new IllegalArgumentException("Illegal load factor: " + loadFactor); // 计算出大于 initialCapacity 的最小的 2 的 n 次方值。 int capacity = 1; while (capacity < initialCapacity) capacity <<= 1; this.loadFactor = loadFactor; //设置HashMap的容量极限

Hashmap holding different data types as values for instance Integer, String and Object

别来无恙 提交于 2020-01-09 12:13:49
问题 I need to create a hashmap with key as integer and it should hold multiple values of different data types. For example if the key is msg id and the values are message of type string timestamp of type time count of type integer version of type integer Then how to store the values of different data type with a single key into the hashmap? 回答1: If you don't have Your own Data Class, then you can design your map as follows Map<Integer, Object> map=new HashMap<Integer, Object>(); Here don't forget

java disc based hashmap

有些话、适合烂在心里 提交于 2020-01-09 11:18:06
问题 I'm working on a web crawler (please don't suggest an existing one, its not an option). I have it working the way it is expected to. My only issue is that currently I'm using a sort of server/client model where by the server does the crawling and processes the data, it then put it in a central location. This location is an object create from a class i wrote. Internally the class maintains a hashmap defined as HashMap<String, HashMap<String, String>> I store data in the map making the url the

Java 8 hashmap high memory usage

百般思念 提交于 2020-01-09 10:11:48
问题 I use a hashmap to store a QTable for an implementation of a reinforcement learning algorithm. My hashmap should store 15000000 entries. When I ran my algorithm I saw that the memory used by the process is over 1000000K. When I calculated the memory, I would expect it to use not more than 530000K. I tried to write an example and I got the same high memory usage: public static void main(String[] args) { HashMap map = new HashMap<>(16_000_000, 1); for(int i = 0; i < 15_000_000; i++){ map.put(i,

Java 8 hashmap high memory usage

时光毁灭记忆、已成空白 提交于 2020-01-09 10:10:08
问题 I use a hashmap to store a QTable for an implementation of a reinforcement learning algorithm. My hashmap should store 15000000 entries. When I ran my algorithm I saw that the memory used by the process is over 1000000K. When I calculated the memory, I would expect it to use not more than 530000K. I tried to write an example and I got the same high memory usage: public static void main(String[] args) { HashMap map = new HashMap<>(16_000_000, 1); for(int i = 0; i < 15_000_000; i++){ map.put(i,

Java基础加强之集合

本秂侑毒 提交于 2020-01-09 04:04:45
集合整体框架图 各集合框架的概述 1. Collection(常用List和Set,不常用Queue和Vector),单元素集合。 2. Map(常用HashMap和TreeMap,不常用HashTable),key-value映射关系。 3. Iterator(迭代器) 4. Comparable和Comparator比较器 5. Collections和Arrays工具类 Java中结合和数组的比较 1.  数组的长度在初始化时指定,只能保存定长的数据。   而集合可以保存不确定长度的数据。同时可以保存具有映射关系的数据(即关联数组,键值对key-value)。 2.  数据元素既可以是基本类型的值,也可以是对象,集合只能保存对象 (实际上是只保存对象的引用变量),基本数据类型的变量要转换成对应的包装类才能放入集合中。 常用集合特性概述 List系 List的特点: 元素有放入顺序,元素可以重复 。 List接口的三个实现类:ArrayList、LinkedList和Vector。 ArrayList、LinkedList和Vector的区别 LinkedList:底层是基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时也存储下一个元素的内存地址。 链表增删快,查找慢。 ArrayList和Vector: 两者底层都是基于数组实现的,查询快,增删慢。

java集合问题篇

此生再无相见时 提交于 2020-01-09 04:02:14
java集合问题篇 ● 请解释为什么集合类没有实现Cloneable和Serializable接口? Java集合必会14问(精选面试题整理) HashMap的put方法的具体流程? hashmap如何扩容 hashmap是如何解决hash冲突的 ● 请解释为什么集合类没有实现Cloneable和Serializable接口? Java集合必会14问(精选面试题整理) Java集合必会14问(精选面试题整理) HashMap的put方法的具体流程? 首先判断数组是否为空(为空就初始化数组),不空----》key是否为空(空:将null插入到数组的0号位置),不空—》根据key算出hash值,再根据hash值算出将要插入的数组的下标【(数组长度-1)&hashcode】,如果该位置有元素了,则将该元素和要插入的元素进行比较(先比较hash,再比较key,相同,则覆盖其value,不同,则jdk1.7使用头插法将添加的元素加入到链表头,然后将链表下移。jdk1.8是使用尾插法。【1.8由于使用了红黑树,总是要遍历链表的,所以直接将其放入尾部】)插入元素后,计数变量:size++ hashmap如何扩容 初始化hashmap的时候会有默认的数组长度16,加载因子3/4,此时阈值为16 3/4=12; 当元素超过12个时就会进行扩容。新数组长度是16 2=32,阈值是32*3/4=24

Java集合基础知识

匆匆过客 提交于 2020-01-09 00:28:07
Java集合框架基础: Collection为集合层级的根接口,集合中包含一组对象。 Set是一个不能包含重复元素的集合;List是一个有序集合,可以包含重复元素; Map是一种key-value结构的集合模型,不能包含重复的key值,每个key只能映射到一个value。 HashMap和HashTable的不同: a. HashMap允许key和value为null, 而HashTable不允许 b. HashTable是线程同步的,而HashMap不是。因此HashMap适合单线程环境,HashTable适合多线程环境(具体应用要根据场景需求,而不是谁适合谁不适合,在不需要线程同步限制的时候推荐使用HashMap,可以提高程序运行的效率) c. LinkedHashMap是HashMap的一个子类,如需遍历顺序,可以很方便的从HashMap转向LinkedHashMap,而HashTable它的顺序是不可知的 d. HashMap提供退key的Set进行遍历,因此它是fail-fast的,单HashTable提供对key的Enumeration进行遍历,不支持fail-fast e. HashTable被认为是个遗留的类,如果你寻求在迭代的时候修改Map,你应该使用CocurrentHashMap 补充: HashMap可以通过Map m = Collections

Java面试题-集合框架篇三

感情迁移 提交于 2020-01-08 21:45:11
21、ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的,这是与HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素。 ArrayList与Vector的区别主要包括两个方面:. (1)同步性: Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。 (2)数据增长: ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定