有沒有辦法確定我們在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. 在HashMap中存儲HashMap
- 6. 在數組中存儲hashMap
- 7. Java HashMap在內部存儲在不同桶中
- 8. java 8 HashMap存儲桶中使用哪種樹型?
- 9. ElasticSearch:獲取存儲桶中的存儲桶密鑰scripted_metric
- 10. 爲什麼LinkedList作爲HashMap的存儲桶實現而不是另一個Hashmap?
- 11. Rails SQL - 創建存儲桶,並獲得每個存儲桶中的記錄數
- 12. 使用正則表達式中的鍵刪除couchbase存儲桶中的條目
- 13. 即使該存儲桶中的項目計數爲0,如何使用大小寫聲明保留存儲桶?
- 14. Sitecore - 刪除存儲桶子項目
- 15. 獲取HashMap條目的ArrayList條目
- 16. MongoDB GridFS存儲桶?
- 17. 在HashMap中存儲數據Java
- 18. 使用帶文件名的存儲桶搜索s3存儲桶中的文件
- 19. 在HashMap中存儲ArrayList
- 20. 從存儲在HashMap中
- 21. 亞馬遜S3僅爲一個存儲桶返回1000個條目,併爲其他存儲桶返回1000個條目(使用java sdk)?
- 22. 的NodeJS LAMBDA S3存儲桶
- 23. 我可以在boltdb中的嵌套存儲桶下嵌套存儲桶嗎?
- 24. 需要更改S3存儲桶(Carrierwave/Fog)中文件的存儲「目錄」
- 25. 如何更新S3存儲桶中所有項目的存儲類別?
- 26. 如何HashMap的存儲JPA
- 27. 插入到HashMap中更改其他存儲的HashMap中的值
- 28. Sitecore 8插入鏈接到存儲桶中的項目
- 29. Amazon S3存儲桶中的子文件夾目錄瀏覽
- 30. 如何使用NodeJS列出GCS存儲桶中的目錄
的HashMap - >鍵集 - > lenght? –
@FranMontero這將讓你所有的鑰匙,OP是要求水桶 –
@asdfzcx這個鏈接可以幫助你http://stackoverflow.com/questions/18636576/what-is-meant-by-number-of- bucket-in-the-hashmap – Dev