hashmap

How to write a correct Hash Table destructor in c++

人盡茶涼 提交于 2019-12-30 11:25:06
问题 I am writing a c++ Hashtable Here is my destructor: HashMap::~HashMap() { for (int i=0; i<cap; i++) { Node* ptr = Hashtable[i]; while (ptr!=NULL) { Node* delptr; delptr=ptr; ptr=ptr->next; delete delptr; } } delete [] Hashtable; } My add function: void HashMap::add(const std::string& key, const std::string& value) { int index = hashfunction(key)%cap;; Node* ptr=Hashtable[index]; Node* newnode=new Node; if (contains(key)==false) { if (ptr == nullptr) { newnode->key=key; newnode->value=value;

HashMap/HashTable/String/StringBuffer/StringBuilde

落爺英雄遲暮 提交于 2019-12-30 11:13:59
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类。String类是不可变类,任何对String的改变都会引发 新的String对象的生成;而StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象,可变和不可变类这一对对象已经齐 全了,那么为什么还要引入新的StringBuilder类干吗?相信大家都有此疑问,我也如此。下面,我们就来看看引入该类的原因。 为什么会出现那么多比较String和StringBuffer的文章? 原因在于当改变字符串内容时,采用StringBuffer能获得更好的性能。既然是为了获得更好的性能,那么采用StringBuffer能够获得最好的性能吗? 答案是NO! 为什么? 如果你读过《Think in Java》,而且对里面描述HashTable和HashMap区别的那部分章节比较熟悉的话,你一定也明白了原因所在。对,就是支持线程同步保证线程安 全而导致性能下降的问题。HashTable是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程 序中的性能比HashTable要高。StringBuffer和StringBuilder类的区别也在于此

《吊打面试官》系列-ConcurrentHashMap & HashTable

孤人 提交于 2019-12-30 10:03:48
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前言 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚( 请允许我使用一下夸张的修辞手法 )。 于是在一个寂寞难耐的夜晚,我痛定思痛,决定开始写互联网技术栈面试相关的文章,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer! 所有文章的名字只是我的噱头,我们应该有一颗谦逊的心,所以希望大家怀着空杯心态好好学,一起进步。 回手掏 上次面试呀,我发现面试官对我的几个回答还是不够满意,觉得还是有点疑问,我就挑几个回答一下。 16是2的幂,8也是,32也是,为啥偏偏选了16? 我觉得就是一个经验值,定义16没有很特别的原因,只要是2次幂,其实用 8 和 32 都差不多。 用16只是因为作者认为16这个初始容量是能符合常用而已。 Hashmap中的链表大小超过八个时会自动转化为红黑树,当删除小于六时重新变为链表,为啥呢?

Sort keys which are date entries in a hashmap

懵懂的女人 提交于 2019-12-30 09:07:00
问题 I have a hashMap which has the following values as key value(sql date , integer) pairs: a.put("31-05-2011",67); a.put("01-06-2011",89); a.put("10-06-2011",56); a.put("25-05-2011",34); when i try to sort the hashMap based on the keys using : Map modified_a=new TreeMap(a); and display the keys it is as follows : 01-06-2011,10-06-2011,25-05-2011, 31-05-2011 but I want the keys to be sorted as 31-05-2011,25-05-2011,01-06-2011 ,10-06-2011 I can see that the values are being sorted based on the

How do I create a Rust HashMap where the value can be one of multiple types?

不羁岁月 提交于 2019-12-30 08:15:42
问题 I want to make a JSON object which includes multiple types. Here's the structure: { "key1": "value", "key2": ["val", "val", "val"] "key3": { "keyX": 12 } } How can I make a HashMap which accepts all these types? I'm trying this: let item = HashMap::new(); item.insert("key1", someString); //type is &str item.insert("key2", someVecOfStrings); //type is Vec<String> item.insert("key3", someOtherHashMap); //Type is HashMap<&str, u32> let response = json::encode(&item).unwrap(); I know that the

What the iteration cost on a HashSet also depend on the capacity of backing map?

限于喜欢 提交于 2019-12-30 06:19:16
问题 From the JavaDocs of HashSet: This class offers constant time performance for the basic operations (add, remove, contains and size), assuming the hash function disperses the elements properly among the buckets. Iterating over this set requires time proportional to the sum of the HashSet instance's size (the number of elements) plus the "capacity" of the backing HashMap instance (the number of buckets). Thus, it's very important not to set the initial capacity too high (or the load factor too

Java HashMap get method null pointer exception

♀尐吖头ヾ 提交于 2019-12-30 05:50:05
问题 I have code similar to the following :- class A { private HashMap<Character, Boolean> myMap; public A() { myMap = new HashMap<Character, Boolean>(); String mychars = "asdfzxcvqwer"; for ( char c : mychars.toCharArray() ) myMap.put(c, true); } public doo(String input) { StringBuilder output = new StringBuilder(); for ( char c : input.toCharArray() ) { if ( myMap.get(c) ) output.append(c); } } ... ... } I get a null pointer exception at the line if ( myMap.get(c) ) -- What am I doing wrong? 回答1

HashMap源码

给你一囗甜甜゛ 提交于 2019-12-30 03:07:25
HashMap源码 转载自 https://blog.csdn.net/mar_ljh/article/details/80929093 /* * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package java.util; import sun.misc.SharedSecrets; import java.io.IOException; import java.io.InvalidObjectException; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; /** *

4.java基础回顾集合3

早过忘川 提交于 2019-12-30 01:11:44
1.Map集合: java.util.Map<k,v>包中 一个双列集合,一个元素包含两个值(key,value) key和value的数据类型可以相同,也可以不相同 key不允许重复,value允许重复 key和value一一对应 Map常用子类: HashMap:实现Map<k,v>接口,多线程的 JDK1.8之前用数组+单向链表,之后用数组+单向链表/红黑树(数组长度超过8时使用红黑树),提高了查询的速度 无序集合,存储元素和取出元素顺序可能不一致 LinkedHashMap:继承HashMap 底层是:哈希表+链表(保证迭代顺序) 有序集合,存储和取出元素顺序一直 Hashtable:实现Map<k,v>接口,单线程的 JDK1.0就有,较早期的集合 键或值不可以是null 单线程速度慢,已经被HashMap代替了 子类Properties集合: 依然被大量使用 唯一和IO流相结合的集合 Map常用方法:: public V put(K key,V value):向Map中添加指定key和value的元素 public V remove(Object key):删除指定key的元素,返回删除的元素值 public V get(Object key):根据指定key,获取对应value boolean containsKey(Object key)

HashSet的原理

和自甴很熟 提交于 2019-12-30 00:09:37
  我们先看一下HashSet和TreeSet在整个集合框架中的位置。他们都实现了Set接口。他们之间的区别是HashSet不能保证元素的顺序,TreeSet中的元素可以按照某个顺序排列。他们的元素都不能重复。   先来看一下HashSet: public static void main(String[] args) {   Set<String> set = new HashSet<String>();   set.add("张三");   set.add("李四");   set.add("王五");   System.out.println(set);   System.out.println(set.size());   System.out.println(set.contains("张三")); }   打印输出的顺序是是: [李四, 张三, 王五],可以看出和存进去的顺序不一致。 我们先看一下 Set<String> set = new HashSet<String>(),这行代码创建了一个HashSet,构造函数如下: public HashSet() { map = new HashMap<>(); }   可以看到实际上是创建了一个HashMap的对象。没错,HashSet底层就是一个HashMap。   再来看一下这行代码:set.add("张三")