Я должен хранить слова и соответствующие им целочисленные индексы в хэш-карте.Хеш-карта будет обновляться одновременно.
Например: допустим, что wordList
равно {a,b,c,a,d,e,a,d,e,b}
Карта хеша будет содержать следующие пары ключ-значение
a:1
b:2
c:3
d:4
e:5
Код для этого следующий:*
public class Dictionary {
private ConcurrentMap<String, Integer> wordToIndex;
private AtomicInteger maxIndex;
public Dictionary( int startFrom ) {
wordToIndex = new ConcurrentHashMap<String, Integer>();
this.maxIndex = new AtomicInteger(startFrom);
}
public void insertAndComputeIndices( List<String> words ) {
Integer index;
//iterate over the list of words
for ( String word : words ) {
// check if the word exists in the Map
// if it does not exist, increment the maxIndex and put it in the
// Map if it is still absent
// set the maxIndex to the newly inserted index
if (!wordToIndex.containsKey(word)) {
index = maxIndex.incrementAndGet();
index = wordToIndex.putIfAbsent(word, index);
if (index != null)
maxIndex.set(index);
}
}
}
Мой вопрос: является ли указанный класс потокобезопасным или нет?По сути, в этом случае атомарная операция должна увеличивать maxIndex
, а затем помещать слово в хэш-карту, если она отсутствует.
Есть ли лучший способ достижения параллелизма в этой ситуации?