Как иметь переменные с динамическими типами данных в Java?

StackOverflow https://stackoverflow.com/questions/2882082

Вопрос

Мне нужно иметь UserProfile Класс, что это просто, профиль пользователя. Этот профиль пользователя, конечно, имеет некоторые важные пользовательские данные, но также необходимо иметь списки сообщений, отправленных от друзей пользователя.

Мне нужно сохранить эти сообщения в LinkedList, ArrayList, HashMap а также TreeMap. Отказ Но только один за раз и не дублируют сообщение для каждой структуры данных. В основном, что-то вроде динамического переменного типа, где я мог выбрать тип данных для сообщений.

Это, как-то, возможно в Java? Или мой лучший подход - это что-то так? Я имею в виду, у меня есть 2 разных класса (для профиля пользователя), где я проводлю сообщения как Map<K,V> (а потом я использую HashMap а также TreeMap где соответственно) и еще один класс, где я их принимаю как List<E> (а потом я использую LinkedList а также ArrayList где соответственно). И, вероятно, используют супер класс для UserProfile Поэтому мне не нужно дублировать переменные и методы для полей, таких как данные, возраст, адрес и т. Д.

Есть предположения?

Это было полезно?

Решение 3

Я закончил использовать то, что я описал на первом посте:

Это, как-то, возможно в Java? Или мой лучший подход - это что-то подобное? Я имею в виду, у меня есть 2 разных класса (для профиля пользователя), один, где я проводлю сообщения как карту (а затем я использую hashmap и turemap, где соответствующим образом) и другой класс, где я принимаю их как список (а потом я использую linkedList и arraaylist где соответственно). И, вероятно, используйте супер класс для пользовательскогопрофильного, поэтому мне не нужно дублировать переменные и методы для полей, таких как данные, возраст, адрес и т. Д.

Другие советы

Прежде всего, вы не дублируете сообщение, добавив его в разные коллекции одновременно - вы храните только отчетливо использованная литература к тому же объекту. (Ну, если сообщение не будет представлено как примитивный тип, как long... Но они не могут быть добавлены в коллекции в любом случае.)

Почему вы не можете иметь все эти коллекции в том же userProfile? Это позволит вам получить доступ к сообщениям по ключам или индексу и итереть через них любым способом, которым вам нравится.

А. Linkedhashmap. Также может быть интересный вариант для вас, поскольку он гарантирует порядок итерации, поэтому, таким образом, оно ведет себя аналогично списку, касающимся итерации, в то время как все еще является картой. В конечном счете, это сводится к тому, как вы хотите получить доступ к сообщениям данного пользователя, который вы не подробные.

Обновлять: @Snake, вы можете хранить ссылки на объекты в коллекциях Java. Примитивный long Значение таким образом не может быть сохранено напрямую, только преобразовывая к Long объект сначала. Обратите внимание, что, поскольку Java5, это преобразование может быть неявно из-за Autoboxing, поэтому вы не видите его в коде, но все же оказывается, тем не менее

List<Long> list = new ArrayList<Long>();
list.add(1L); // the primitive value is boxed into a Long object,
              // which is then added to the list
long value = list.get(0); // the value of the Long object in the list is outboxed
                          // and assigned to the primitive variable

Если это университетский проект, то я подозреваю, что то, что вы должны сделать, это так:

Collection mycoll;
mycoll = new ArrayList();
for (Message m:message) {
  // do stuff and measure the performance
}
// do other stuff and measure the performance
mycoll = new LinkedList();
// do the same stuff as a above and measure the performance again
mycoll = new HashMap();
//... and so on

Как указано выше, добавление объекта в коллекцию не дублирует его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top