Я работаю с Objectify для доступа к DataStore в приложении приложения Google App Engine.[GAE - Objectify]: LinkedHashMap не поддерживает заказ ключа
У меня 2 Entities:
@Entity
public class Client {
@Id String id;
}
@Entity
public class Queue {
@Index @Id String name;
@Load LinkedHashMap<String,Ref<Client>> clientsInQueue;
}
В сделке, я сделать что-то вроде этого:
Client newClient = new Client(...);
ofy().save().entity(newClient);
Queue selectedQueue = ofy().load().type(Queue.class).id(queueName).now();
selectedQueue.getClientsInQueue().put(newClient.getId(), Ref.create(newClient));
Но когда я пытаюсь напечатать все элементы в LinkedHashMap, я заметил, что элементы находится в точно обратном порядке.
Например, если я добавить 2 клиентов в LinkedHashMap и сохранить его, как это:
Queue selectedQueue = new LinkedHashMap<String,Ref<Client>>();
String id1 = "id1";
Client c1 = new Client(id1);
ofy().save().entity(c1);
String id2 = "id2"
Client c2 = new Client(id2);
ofy().save().entity(c2);
selectedQueue.getClientsInQueue().put(c1.getId(), Ref.create(c1));
selectedQueue.getClientsInQueue().put(c2.getId(), Ref.create(c2));
ofy().save().entity(selectedQueue);
Set<String> keys = selectedQueue.getClientsInQueue().keySet();
for(String key : keys){
Client c= selectedQueue.getClientsInQueue().get(key).get();
log.info("id: "+c.getId());
}
Результат:
ID: id2
ID: id1
Почему я получаю такое поведение? Я знаю, что LinkedHashMap должен поддерживать порядок ключей! Есть ли проблема в использовании LinkedHashMap с хранилищем данных GAE?
Заранее спасибо. Cheers, Alessandro.
[LinkedHashMap] (http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html) Хэш-таблица и связанный список реализации интерфейса карты с предсказуемым порядком итерации. Эта реализация отличается от HashMap тем, что она поддерживает двусвязный список, проходящий через все его записи. Этот связанный список определяет порядок итераций, который обычно является порядком, в котором ключи были вставлены в карту (порядок вставки). – mancioshell