Simple HashMap analyser which can give you an info about:
- underlying hash table size (bucket count)
- used bucket and indexes
- data stored in buckets with hash - for simplicity data from bucket is converted to Array List
- type of buckets (before conversion) - linked nodes or self balanced red black binary search tree
Analyse map usage
HashMap<String, Integer> map = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); // new analyser intance with key and value types HashMapAnalyser<String, Integer> analszer = new HashMapAnalszer<>(String.class, Integer.class); // HashMapMetadata provides analysed data HashMapMetadata<String, Integer> hashMapMetadata = analyser.analyse(map);HashMapMetadata structure for given example
Collapse to display structure
HashMapMetadata{ totalBucketsCount=16, usedBucketsCount=3, bucketsMetadata= [ BucketMetadata{ bucketIndex=1, nodeType=LINKED_LIST_NODE, nodesData=[ NodeData{ key=a, value=1, hashCode=97 }]}, BucketMetadata{ bucketIndex=2, nodeType=LINKED_LIST_NODE, nodesData=[ NodeData{ key=b, value=2, hashCode=98 }]}, BucketMetadata{ bucketIndex=3, nodeType=LINKED_LIST_NODE, nodesData=[ NodeData{ key=c, value=3, hashCode=99 }]} ] } Sort analysed data and check largest bucket
HashMapAnalszer<String, Integer> analyser = new HashMapAnalyser<>(String.class, Integer.class); HashMapMetadata<String, Integer> mapMetadata = analyser.analyse(mapWithBucketCollision); BucketSorter.sort(mapMetadata); System.out.println(mapMetadata.getBucketsMetadata().stream().findFirst());Tested with OpenJDK [ '12', '13', '15' ].
Java-HashMap-Analyser is licensed under the Apache License, Version 2.0