有没有办法确定我们在HashMap
中有哪些存储桶,以及它们包含多少个条目?HashMap存储桶中的条目数
1
A
回答
2
你可以通过反射来做到这一点,但它是非常特殊的jdk。这一个适用于小型地图Java 8,但在地图变大时可能会中断,因为我相信Java 8在桶充满时使用混合机制。
private void buckets(HashMap<String, String> m) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
// Pull out the table.
Field f = m.getClass().getDeclaredField("table");
f.setAccessible(true);
Object[] table = (Object[]) f.get(m);
int bucket = 0;
// Walk it.
for (Object o : table) {
if (o != null) {
// At least one in this bucket.
int count = 1;
// What's in the `next` field?
Field nf = o.getClass().getDeclaredField("next");
nf.setAccessible(true);
Object n = nf.get(o);
if (n != null) {
do {
// Count them.
count += 1;
} while ((n = nf.get(n)) != null);
}
System.out.println("Bucket " + bucket + " contains " + count + " entries");
}
bucket += 1;
}
}
public void test() throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
HashMap<String, String> m = new HashMap<>();
String[] data = {"One", "Two", "Three", "Four", "five"};
for (String s : data) {
m.put(s, s);
}
buckets(m);
}
打印:
Bucket 7 contains 2 entries
Bucket 13 contains 2 entries
Bucket 14 contains 1 entries
+0
谢谢,它在我的情况下工作。 – asdfzcx
2
不直接:这是通过使用私有字段隐藏的实现细节。
如果你有机会获得你的JDK的源代码,你可以使用反射 API来访问你的HashMap<K,V>
,这将让你得到桶数和个体桶的内容private variables。但是,你的代码将是不可移植的,因为它会破坏一个库类的封装。
相关问题
- 1. Java HashMap重复存储桶条目
- 2. 什么类型是HashMap存储桶
- 3. 存储在存储桶列表中的项目数量
- 4. 用.properties文件中存储的所有条目填充HashMap
- 5. java 8 HashMap存储桶中使用哪种树型?
- 6. Java HashMap在内部存储在不同桶中
- 7. ElasticSearch:获取存储桶中的存储桶密钥scripted_metric
- 8. 即使该存储桶中的项目计数为0,如何使用大小写声明保留存储桶?
- 9. 获取HashMap条目的ArrayList条目
- 10. MongoDB GridFS存储桶?
- 11. 从存储在HashMap中
- 12. 的NodeJS LAMBDA S3存储桶
- 13. 我可以在boltdb中的嵌套存储桶下嵌套存储桶吗?
- 14. 如何更新S3存储桶中所有项目的存储类别?
- 15. 插入到HashMap中更改其他存储的HashMap中的值
- 16. 如何在S3存储桶策略中执行OR条件?
- 17. Sitecore 8插入链接到存储桶中的项目
- 18. 如何使用NodeJS列出GCS存储桶中的目录
- 19. 仅存储X条最近的条目
- 20. 删除S3中的存储桶
- 21. 删除S3存储桶中的对象
- 22. BigQuery中的Google云端存储桶
- 23. 将hashmap存储在存储或db?
- 24. MapStruct:与HashMap中的条目处理源
- 25. 标准存储桶或计数排序
- 26. 用于将单词存储在ArrayList中的存储桶
- 27. Django ElasticBeanstalk更改存储桶
- 28. 上传到S3存储桶
- 29. Amazon S3存储桶策略
- 30. Couchbase API存储桶创建
的HashMap - >键集 - > lenght? –
@FranMontero这将让你所有的钥匙,OP是要求水桶 –
@asdfzcx这个链接可以帮助你http://stackoverflow.com/questions/18636576/what-is-meant-by-number-of- bucket-in-the-hashmap – Dev