001package com.fs.starfarer.api.util; 002 003import java.util.LinkedHashMap; 004 005public class CountingMap<K> extends LinkedHashMap<K, Integer> { 006 private static final long serialVersionUID = 1L; 007 008 public void add(K key, int quantity) { 009 Integer val = super.get(key); 010 if (val == null) val = 0; 011 val+=quantity; 012 put(key, val); 013 } 014 015 public void add(K key) { 016 add(key, 1); 017 } 018 019 public void sub(K key) { 020 sub(key, 1); 021 } 022 public void sub(K key, int quantity) { 023 Integer val = super.get(key); 024 if (val == null) val = 0; 025 val-=quantity; 026 if (val <= 0) { 027 remove(key); 028 return; 029 } 030 put(key, val); 031 } 032 033 public int getCount(K key) { 034 Integer val = super.get(key); 035 if (val == null) val = 0; 036 return val; 037 } 038 039 @Override 040 public Integer get(Object key) { 041 return getCount((K) key); 042 } 043 044 public int getTotal() { 045 int total = 0; 046 for (K key : keySet()) { 047 total += get(key); 048 } 049 return total; 050 } 051 052 public K getLargest() { 053 int max = 0; 054 K maxKey = null; 055 for (K key : keySet()) { 056 int c = getCount(key); 057 if (c > max) { 058 max = c; 059 maxKey = key; 060 } 061 } 062 return maxKey; 063 } 064 065}