Tag: hashmap

java linkedhashmap迭代

我有两个hashmap LinkedHashMap val1 = new LinkedHashMap(); LinkedHashMap val2 = new LinkedHashMap(); 每个hashmap都有不同的键和值。 我试图同时迭代两个hashmap并将val1->int[] to val2->int每个值乘以val1->int[] to val2->int 做最简单,最禁食的方法是什么? 我在两个hashmap中都有数千个值。 谢谢

为什么更改用作HashMap中的键的对象的哈希码会使查找返回null?

请考虑以下情形: Object o1 = new Object(); Object o2 = new Object(); HashMap map = new HashMap(); map.put(o1, o2); boolean test1 = map.get(o1) == o2; // This evaluates to true // Now lets say we alter the state of o1: o1.setSomeInternalState(Object newState); boolean test2 = map.get(o1) == o2; // This evaluates to false, because now map.get(o1) […]

如何从JSON字符串获取值的所有JSON路径列表?

我的目标是读取一个JSON文件并理解所有值的位置,这样当我遇到相同的JSON时,我可以轻松读取所有值。 我正在寻找一种方法,以Jayway JsonPath格式返回包含每个数据值的所有路径的列表。 示例JSON: { “shopper”: { “Id”: “4973860941232342”, “Context”: { “CollapseOrderItems”: false, “IsTest”: false } }, “SelfIdentifiersData”: { “SelfIdentifierData”: [ { “SelfIdentifierType”: { “SelfIdentifierType”: “111” } }, { “SelfIdentifierType”: { “SelfIdentifierType”: “2222” } } ] } } 理想情况下,我想将JSON作为字符串,并执行以下操作: String json = “{‘shopper’: {‘Id’: ‘4973860941232342’, ‘Context’: {‘CollapseOrderItems’: false, ‘IsTest’: false } }, ‘SelfIdentifiersData’: {‘SelfIdentifierData’: [{‘SelfIdentifierType’: […]

HashMap碰撞是否会导致resize?

在放入HashMap期间发生冲突时,地图是否已resize,或者是添加到该特定存储桶中列表的条目?

为什么这段代码有时会抛出NullPointerException?

请考虑以下Java源代码: if( agents != null ) { for( Iterator iter = agents.keySet().iterator(); iter.hasNext(); ) { // Code that uses iter.next() … // } } agents是HashMap 。 为什么for语句有时会抛出NullPointerException ? 谢谢。

Java – 自定义哈希映射/表格一些点

在之前的一些post中,我提出了一些关于java中自定义哈希映射/表编码的问题。 现在我无法解决它,也许我忘了正确地提到我真正想要的东西,我总结所有这些以使其清晰和准确。 我要做的是: 我正在尝试为我们的服务器编写代码,我必须通过URL查找用户访问类型。 现在,我有1110万个URL(大约)。 那么,我们做了什么, 1)将数据库划分为1.1亿个Url的10个部分。 2)使用并行数组构建HashMap,其键是URL的一部分(表示为LONG),值是URL的其他部分(表示为INT) – 键可以有多个值 。 3)然后在系统启动时,每天在HashMap中搜索一些其他URL(一天内保存的数百万个URL)。 你有什么尝试: 1)我已经尝试了很多NoSQL数据库,但是我们发现它不太适合我们的目的。 2)我为此目的构建了自定义hashmap (使用两个并行数组)。 那么,问题是什么: 当系统启动时,我们必须加载每个数据库的哈希表并执行搜索百万个url: 现在,问题是, 1)虽然HashTable性能非常好,但是加载HashTable时代码需要更多时间(我们使用文件通道和内存映射缓冲区来加载它,加载HashTable需要20秒–220万条入口 – 因为加载因子是0.5, 我们发现它最快 ) 所以,我们花时间:( HashTable Load + HashTable Search)* DB =(5 + 20)* 10 = 250秒。 对我们来说这是非常昂贵的,并且大部分时间(250秒中的200秒)用于加载哈希表。 你有没有想过其他的方式: 一种方法是: 无需担心加载和存储,并通过使用内存映射缓冲区将缓存留给操作系统。 但是,由于我必须搜索数百万个密钥,因此它的性能会比上面提高。 由于我们发现HashTable性能不错但加载时间很长,我们认为可以通过另一种方式将其切断: 1)创建一个大小为Integer_MAX的链接列表数组( 我自己的自定义链表 )。 2)将值(int)插入到编号为密钥编号的链接列表中(我们将密钥大小减小到INT)。 3)因此,我们必须仅将链接列表存储到磁盘。 现在,问题是,创建如此数量的链接列表需要花费大量时间,如果数据分布不均,则创建如此大量的链接列表没有任何意义。 那么,你的要求是什么: 只需我的要求: 1)具有多个值插入和搜索的键。 寻找不错的搜索性能。 2)快速加载(特别)到内存中的方法。 (键是64位INT,值是32位INT,一个键最多可以有2-3个值。我们可以使我们的键32位也会产生更多的冲突,但如果我们可以做得更好,我们可以接受) […]

如何在放入java HashMap时避免重新排序项目

我正在创建一个新的Map并将字符串推入其中(没什么大不了的) – 但我注意到随着地图的增长,字符串正在被重新排序。 是否有可能停止这种重新排序,以便地图中的项目保留所放置的顺序? Map x = new HashMap(); x.put(“a”,”b”); x.put(“a”,”c”); x.put(“a”,”d”); x.put(“1″,”2”); x.put(“1″,”3”); x.put(“1″,”4”); //this shows them out of order sadly… for (Map.Entry entry : x.entrySet()) { System.out.println(“IN THIS ORDER … ” + entry.getValue()); }

HashMap应该是未分类的,但仍然按键排序

根据这些: http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html HashMap,LinkedHashMap和TreeMap之间的区别 java beginner:密钥如何在哈希映射中排序? Java的HashMap应该是未排序的,但它是按照Key进行排序的。 我认为这是一个问题,因为我需要插入订单数据。 所以,我使用的是LinkedHashMap 。 但我仍然困惑为什么HashMap对它进行了排序。 有谁能解释一下? 我做了一个简单的例子来查看排序。 public static void main(String[] args) { HashMap newHashMap = new HashMap(); newHashMap.put(2, “First”); newHashMap.put(0, “Second”); newHashMap.put(3, “Third”); newHashMap.put(1, “Fourth”); Iterator<Entry> iterator = newHashMap.entrySet() .iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); System.out.println(“Key: ” + entry.getKey()); System.out.println(“Value: ” + entry.getValue()); iterator.remove(); } } 结果: […]

对作为hashmap中的日期条目的键进行排序

我有一个hashMap,它具有以下值作为键值value(sql date , integer)对: a.put(“31-05-2011”,67); a.put(“01-06-2011”,89); a.put(“10-06-2011”,56); a.put(“25-05-2011”,34); 当我尝试使用以下键对hashMap进行排序时:Map modified_a = new TreeMap(a); 并按如下方式显示按键: 01-06-2011,10-06-2011,25-05-2011, 31-05-2011 但我希望按键排序为 31-05-2011,25-05-2011,01-06-2011 ,10-06-2011 我可以看到值是根据前2位数(这是日期值)进行排序的,但我还需要考虑月份值,并根据月份排序,然后按月对每个月进行排序。 任何线索?

为什么这个HashMap.get返回null?

我正在尝试创建一个Hashmap来为我执行查找。 但是,当我运行此测试代码时,输​​出为空。 我认为它必须归因于密钥的存储方式,但我并不积极。 也许这是一个类似的怪癖,就像var1 == var2不等于它们,除非它们指向内存中的相同Object,而你必须使用var1.equals(var2) ? 有两个类可以测试它。 TestCard.java import java.util.HashMap; public class TestCard { // HashMap for SpecialK Lookup private static HashMap specialKLookup = new HashMap(); // Constructor public TestCard(){ } public static void main(String[] args) { Card[] cards = new Card[3]; cards[0] = new Card((short)12, (short)0); cards[1] = new Card((short)0, (short)1); cards[2] = […]