Каждый EXE, в котором размещены элементы управления COM или OLE, определяет состояние своей квартиры. Состояние квартиры по умолчанию STA (и для большинства программ должно быть STA).
STA - все элементы управления OLE по необходимости должны находиться в STA. STA означает, что вашим COM-объектом всегда нужно манипулировать в потоке пользовательского интерфейса и нельзя передавать в другие потоки (во многом как любой элемент пользовательского интерфейса в MFC). Однако ваша программа может иметь много потоков.
MTA - Вы можете манипулировать объектом COM в любом потоке вашей программы.
Да, я бы использовал Map
. Я бы обернул add
примерно так:
private static void incrementValue(Map<String, Integer> counters, String toAdd) {
Integer currValue = counters.get(toAdd);
if (currValue == null)
counters.put(toAdd, 1);
else
counters.put(toAdd, currValue+1);
}
Или без дженериков:
private static void incrementValue(Map counters, String toAdd) {
Integer currValue = (Integer) counters.get(toAdd);
if (currValue == null)
counters.put(toAdd, 1);
else
counters.put(toAdd, currValue+1);
}
Поскольку спрашивающий упомянул, что универсальные шаблоны использовать нельзя, поскольку целевой платформой была Java 1.4, можно было использовать Коллекции Apache Commons , которые не используйте дженерики.
В ответе от pjp упоминается, что можно использовать Bag.
Оказывается,
Откуда берутся данные? Если db - вы можете сделать это очень легко в запросе на бэкэнде с помощью group by.
Карта кажется подходящим вариантом. Прямой доступ :)
Ключ: Элемент значение: количество вхождений или список с индексами элемента в списке.
Помимо решений, которые были опубликованы, первое, что приходит мне в голову, - это составить таблицу «код - значение» и закодировать список с помощью кодов. Это было бы очень компактно.
Наиболее естественной структурой для этого является Сумка, также известная как Мультимножество.
Сумка - это, по сути, функция от Объекта к Счету.
Коллекции Google имеют Мультонабор, однако вы можете легко создать ваше собственное, используя HashMap.