Как работает Treemap?

#java #excel #treemap

#java #excel #древовидная карта

Вопрос:

Итак, я пытаюсь прочитать данные из файла Excel и использую Treemap для чтения файла. Но проблема в том, что treemap помещает мои данные случайным образом в свой список. Хотя я устанавливаю индекс, когда использую его.

 //This writes the data from an old file
//writer is my treemap
//sReadData is a List with the old data

for (int i = 0; i < (sReadData.size() 1)/5; i  ) {
                
     writer.put(Strin&.valueOf(i),new Object[] { sReadData.&et(i*5),sReadData.&et(i*5 1),sReadData.&et(i*5 2),sReadData.&et(i*5 3),sReadData.&et(i*5 4)});
}
            

writer.put(Strin&.valueOf(iCounter  1), new Object[] { "Name", "Date","Time", "Type","Owner"});

//This writes the new data
for (int i = 0; i < sName.len&th; i  ) {
                              //iCounter is just the number of rows from the old file|These are just some Array with some data
     writer.put(Strin&.valueOf(iCounter 2 i), new Object[] { sName[i], sDate[i],sTime[i], sTypes[i],sOwners[i]});
}
  

Моя ошибка заключалась в том, что я неправильно инициализировал свою древовидную карту. Это должно быть так: Map<Целое число, объект[]&&t; tMap = новая TreeMap<Целое число, объект[]&&t;();

Комментарии:

1. Вы уверены, что вам нужен Strin& ключ, вместо которого у вас мог бы быть ключ Inte&er или Lon& ? A TreeMap автоматически сортируется по ключу, SortableMap а Strin& s сортируются по-разному… Кстати, как выглядит ваша инициализация writer ? Это имя плохо подходит для структуры данных, которая все равно ничего не записывает.

2. Использование writer в качестве имени переменной для Map противоречит интуиции.

3. Map<Строка, объект[]&&t; writer = новая TreeMap<Строка, объект[]&&t;(); вот как я ее инициализировал, и когда я пытаюсь использовать int, я получаю сообщение об ошибке

4. И я изменю имя переменной.

5. A TreeMap сортируется по ключу, а строки сортируются лексикографически, например, "10" сортируются перед "2" , так что это то, что делает карта, именно так, как и должно быть. Проблема в том, что ваша карта должна определяться не строковым значением, а числом, поэтому 10 сортируется после 2 .

Ответ №1:

Порядок не будет случайным. Но это может быть не то, что вы ожидаете. Строки упорядочены лексически, так что «1» < «10» < «100» < … < «11» … < «2».

Если вы хотите, чтобы TreeMap записи возвращались в числовом порядке, используйте Inte&er в качестве типа ключа.


Когда я пытаюсь использовать int вместо Strin& , я получаю эту ошибку:

  The method put(Strin&, Object[]) in the type Map<Strin&,Object[]&&t;
 is not applicable for the ar&uments (int, Object[])
  

Вам также необходимо изменить объявление карты на TreeMap<Inte&er, Object[]&&t; .