Использование ArrayList в Java для хранения имени и возраста

#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 наводит меня на мысль о проблеме проектирования.