Tag: hashmap

为什么在将50,000个对象插入HashMap时会出现OutOfMemoryError?

我试图将大约50,000个对象(因此50,000个键)插入到java.util.HashMap 。 但是,我一直得到一个OutOfMemoryexception。 ( Segment是我自己的类 – 非常轻的重量 – 一个String字段和3个int字段)。 线程“main”中的exceptionjava.lang.OutOfMemoryError:Java堆空间 在java.util.HashMap.resize(HashMap.java:508) 在java.util.HashMap.addEntry(HashMap.java:799) 在java.util.HashMap.put(HashMap.java:431) at bus.tools.UpdateMap.putSegment(UpdateMap.java:168) 这看起来非常荒谬,因为我发现机器上有足够的内存 – 无论是在免费RAM还是用于虚拟内存的高清空间。 是否有可能Java运行时有一些严格的内存要求? 我能增加这些吗? HashMap有一些奇怪的限制吗? 我是否必须实施自己的? 还有其他值得关注的课程吗? (我在具有2GB RAM的Intel机器上运行OS X 10.5下的Java 5。)

在Java中存储国家/地区代码,名称和Continent的最佳方式

我想要一个List或某种类型的Array ,存储有关每个国家的信息: 2个字母代码 国家名称,如巴西 世界大陆/地区,如东欧,北美等。 我会手动将每个国家分类到地区/大陆(但如果有办法自动执行此操作,请告诉我)。 这个问题是关于如何存储和访问这些国家。 例如,我希望能够检索北美的所有国家/地区。 我不想使用本地文本文件等,因为这个项目将使用Google Web Toolkit转换为javascript。 但是存储在Enum或某种类型的其他资源文件中,将其与其余代码分开,就是我真正想要的。

为什么HashMap比HashSet更快?

我一直在阅读/研究HashMap比HashSet更快的原因。 我不太了解以下陈述: HashMap比HashSet更快,因为值与唯一键相关联。 在HashSet ,成员对象用于计算哈希码值,对于两个对象,哈希码值可以相同,因此使用equals()方法检查是否相等。 如果返回false ,则表示两个对象不同。 在HashMap ,使用密钥对象计算哈希码值。 使用密钥对象计算HashMap哈希码值。 这里,成员对象用于计算哈希码,对于两个对象可以是相同的,因此使用equals()方法来检查相等性。 如果返回false ,则表示两个对象不同。 总结我的问题: 我认为HashMap和HashSet以相同的方式计算哈希码。 他们为什么不同? 你能提供一个具体的例子, HashSet和HashMap如何以不同的方式计算哈希码? 我知道什么是“关键对象”,但是“成员对象”是什么意思? HashMap可以做与HashSet相同的事情,并且速度更快。 为什么我们需要HashSet ? 例: HashMap = new HashMap(); map.put(“obj1”,true); => exist map.get(“obj1”); =>if null = not exist, else exist

达到HashMap或HashSet最大容量时会发生什么?

几分钟后,我回答了一个问题,询问“ Java中HashMap的最大可能大小 ”。 正如我一直读到的, HashMap是一个可扩展的数据结构。 它的大小仅受JVM内存大小的限制。 因此,我认为它的大小没有硬性限制并相应地回答。 (同样适用于HashSet。) 但有人纠正我说,因为HashMap的size()方法返回一个int ,所以它的大小有限制。 一个完全正确的观点。 我只是尝试在我的本地测试它但失败了,我需要超过8GB的内存来在HashMap中插入超过2,147,483,647个整数,我没有。 我的问题是: 当我们尝试在HashMap / HashSet中插入2,147,483,647 + 1个元素时会发生什么? 是否抛出错误? 如果是,哪个错误? 如果不是HashMap / HashSet会发生什么,它已经存在的元素和新元素? 如果某人有幸拥有16GB内存的机器,那么你可以尝试一下。 🙂

易失性HashMap与ConcurrentHashMap

我有一个缓存类,其中包含一个用于存储缓存项的volatile HashMap 。 我很好奇将volatile HashMap更改为ConcurrentHashMap的后果是什么? 我会获得性能提升吗? 此缓存是只读缓存。 什么是最好的选择? 只是HashMap? 缓存正在一段时间内填充。

为什么Hashtable的initialCapacity为11而HashMap中的DEFAULT_INITIAL_CAPACITY为16且需要2的幂

在jdk 1.6中比较HashMap和Hashtable源代码,我在HashMap中看到了下面的代码 /** * The default initial capacity – MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 16; int capacity = 1; while (capacity < initialCapacity) capacity <<= 1; 但是,在Hashtable中,我看到下面的代码? table = new Entry[initialCapacity]; public Hashtable() { this(11, 0.75f); } 所以我的问题是:为什么hashMap需要2的幂作为初始容量? 而哈希表选择11作为默认初始容量? 我认为这与哈希表是线程安全的并且不允许空键或值的事情无关。 谢谢。

HashMap在多个键中搜索特定值

我正在检查我的HashMap中是否存在密钥,如果存在,我还要检查是否有任何其他密钥的值与我检查过的原始密钥的名称相同。 例如我有这个。 System.out.println(“What course do you want to search?”); String searchcourse = input.nextLine(); boolean coursefound = false; if(hashmap.containsKey(searchcourse) == true){ coursefound = true; } 这将检查我的hashmap中是否存在该键,但现在我需要检查特定值的每个键的值,在本例中为字符串搜索字符串。 通常我会使用一个基本的for循环来迭代这样的东西,但它不适用于HashMaps。 我的值也存储在String ArrayList中,如果有帮助的话。

用数字替换符号

我想读取一个文件并检测符号后面的字符是数字还是单词。 如果是数字,我想删除它前面的符号,将数字转换为二进制文件并将其替换为文件。 如果是单词,我想首先将字符设置为数字16,但是如果使用另一个单词,我想将1添加到原始数字。 这就是我想要的: 如果文件名读取(…表示不需要翻译的字符串): %10 … %firststring … %secondstring … %firststring … %11 … and so on… 我希望它看起来像这样: 0000000000001010 (10 in binary) … 0000000000010000 (16 in binary) … 0000000000010001 (another word was used, so 16+1 = 17 in binary) … 0000000000010000 (16 in binary) … 0000000000001011 (11 in binary) 这就是我尝试的:anyLines只是一个字符串数组,其中包含文件的内容(如果我说System.out.println(anyLines [i]),我会打印出文件的内容)。 更新! try { […]

从ArrayList HashMap中获取多个随机值

我想从ArrayList获取一些特定的数字随机值 final ArrayList<HashMap> menuItems = new ArrayList<HashMap>(); for (int i = 0; i == 4; i++) { index = random.nextInt(menuItems.size()); HashMap getitem = menuItems.get(index); System.out.println(getitem.get(KEY_NAME)); } 什么都没打印出来。 如果我在循环外使用它,循环中的代码工作,但因为我需要多个值,我使用循环,它不起作用。

HashMap值未附加到ListView

我正在尝试从具有1个键的多个值的散列映射中检索数据并将其设置为列表视图,但不是将值设置到列表视图中并显示列表视图,而是显示的所有内容都是数组(没有键)。 代码如下: ListView lv = (ListView)findViewById(R.id.list); //hashmap of type `HashMap<String, List>` HashMap<String, List> hm = new HashMap<String, List>(); List values = new ArrayList(); for (int i = 0; i < j; i++) { values.add(value1); values.add(value2); hm.put(key, values); } 并检索值并放入列表视图 ListAdapter adapter = new SimpleAdapter( MainActivitty.this, Arrays.asList(hm), R.layout.list_item, new String[] { key, value1,value2}, new int[] { […]