#java
#java
Вопрос:
Я хочу добавить как строковый, так и целочисленный тип значения в ArrayList.
Например, у меня есть список массивов, в который я хочу добавить имя пользователей и возраст соответствующего пользователя в одном arralist.
Как я могу этого добиться. Как я могу это получить? На самом деле я извлекаю данные из базы данных и хочу сохранить все имена сотрудников и возраст в одном списке массива. Как список многомерных массивов.
Комментарии:
1. Вау, во многих ответах говорится одно и то же.
Ответ №1:
Создайте класс person с возрастом и именем, затем создайте ArrayList этого типа.
class Person {
private String mName;
private int mAge;
public Person(int age, String name) {
mName = name;
mAge = age;
}
public String getName() {
return mName;
}
etc ........
}
ArrayList<Person> arr = new ArrayList<Person>();
arr.add(new Person(10, "joe"));
Комментарии:
1. Это хороший ответ — вы обнаружите, что на самом деле вам всегда был нужен класс Person — вы неправильно разработали свой код. Желание сохранить эту пару значений в одной коллекции — это подсказка, которая говорит вам именно об этом. Вы должны добавлять методы к «Person» всякий раз, когда у вас есть что-либо, что работает с именем и / или возрастом, и вы даже можете обнаружить, что у вас есть больше значений, которые принадлежат здесь.
Ответ №2:
Вы должны создать класс для представления пользователя, а затем добавить их в список. Смешивать типы объектов в списке — плохая практика. Вы могли бы начать с простого класса person:
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
Затем создайте список, подобный этому:
List<Person> people = new ArrayList<Person>();
И добавьте людей, которых вы прочитали из базы данных, в список:
people.add(new Person(name, age));
Комментарии:
1. хорошо, друг. Но предположим, что у меня есть 200 записей, чем потребуется 1000 объектов. Я думаю, что это ухудшит мою производительность. Я действительно делаю этот проект в Android?
2. Я собирался проголосовать за это, но заметил общедоступные переменные. Ответ Райана более полный (Хотя, честно говоря, я часто начинаю с этого — просто по мере того, как Person развивается в реальный класс со своими собственными методами и большим количеством атрибутов, я всегда жалею, что в первую очередь не сделал переменные закрытыми)
3. @Durga Dutt Нет, это именно то, как вы кодируете хороший OO. Также НИКОГДА не делайте предположений, основанных на предполагаемой проблеме с производительностью — проверяйте, прежде чем что-либо делать. В целом, хотя вы, вероятно, обнаружите, что это работает лучше, чем другие решения, из-за того, что это OO-язык и оптимизирован для OO-кодирования.
4. @Durga: Это почти наверняка не повлияет на производительность для такого количества записей. @Bill прав, не оптимизируйте, пока не узнаете, что это необходимо. И я сильно сомневаюсь, что вам это понадобится в этом случае.
5. @Bill: да, я пропустил приватные поля и методы получения в первый раз. С тех пор я обновил ответ для полноты. Я бы, вероятно, даже сделал их окончательными, но я полагаю, что могут потребоваться установщики, и это не имеет большого значения для этого примера.
Ответ №3:
Вы можете использовать простой ArrayList
и добавить тип в штучной упаковке int
, Integer
наряду с String
.
Ответ №4:
Вы можете создать класс Person
class Person{
String name;
int age;
//Add the getteres and setters
}
Затем объявите ArrayList следующим образом.
ArrayList<Person> p = new ArrayList<Person>();
Затем для каждого пользователя создайте объект person и заполните ArrayList следующим образом.
p.add(personObj);
Ответ №5:
Вы можете создать ArrayList<Object>
. Оба Integer
и String
являются подклассами Object
, и поэтому оба могут быть добавлены в ArrayList<Object>
.
Тем не менее, мне кажется маловероятным, что вы действительно захотите это сделать. ArrayList
— это список. Обычно это неприятный запах (т. Е. признак плохого дизайна), если вы храните в списке вещи, которые в некотором смысле отличаются друг от друга.
Наличие соответствия между элементами, как вы описываете, предполагает, что вам действительно нужен список объектов employee, где у каждого объекта employee есть имя и возраст.
Другой возможностью было бы использовать Map
, если имена уникальны. Вы можете использовать LinkedHashMap
, если вам важно сохранить порядок.
Ответ №6:
class Employee{
int age;
String name;
// acessor method
}
Lit<Employee> list = new ArrayList<Employee>();
Ответ №7:
Чтобы убедиться, что компилятор не жалуется, используйте Generics, чтобы указать, что вы хотите добавить объекты в свой ArrayList; это позволит вам добавлять к нему оба типа Integer и String:
ArrayList<Object> myList = new ArrayList<Object>();
Затем вы можете добавить в него свои объекты любого типа.
Однако Java не просто так строго типизирована, поэтому необходимость добавления двух типов в один ArrayList наводит меня на мысль о проблеме проектирования.