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