Вы можете использовать Map.Entry<Integer, Double>
для хранения двух значений. (В конечном итоге вы должны использовать либо AbstractMap.SimpleEntry, либо AbstractMap.SimpleImmutableEntry)
Таким образом, ваша TreeMap будет TreeMap<String, Map.Entry<Integer, Double>>
Однако, если у вас нет веских причин поступить иначе, я настоятельно рекомендую вам выполнить расчет на лету. Пересчет каждые дроби каждый раз, когда что-либо вставляется или удаляется, занимает много времени и перемешивает небольшие маленькие объекты, поэтому, вероятно, он будет медленнее , чем просто выполнение вычисления. Кроме того, пересчет вызовет проблемы с многопоточностью, если несколько потоков обращаются к TreeMap. Вместо этого что-то вроде
public synchronized double getFraction(String key) {
Integer value = theTreeMap.get(key);
if (value == null)
return 0.0; // or throw an exception if you prefer...
// note, since the Map has at least one entry, no need to check for div by zero
return value.doubleValue() / theTreeMap.size();
}