Как создать список объектов и получить доступ к их атрибутам

#java #list #object #arraylist

#java #Список #объект #arraylist

Вопрос:

Я создал объект N, который имеет некоторые атрибуты, например:

 public class LogEvidence {
private String comment;
private String url;
private String time;

public LogEvidence(String comentario, String url, String tiempo) {
    super();
    this.comment = comentario;
    this.url = url;
    this.time = tiempo;
}

public String getComentario() {
    return comment;
}

public void setComentario(String comentario) {
    this.comment = comentario;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

public String getTiempo() {
    return time;
}

public void setTiempo(String tiempo) {
    this.time = tiempo;
}

@Override
public String toString() {
    return "LogEvidence [comentario="   comment   ", url="   url   ", tiempo="   time   "]";
}
}
  

Теперь я хочу сделать что-то вроде этого:

 ArrayList<LogEvidence>log = new ArrayList<LogEvidence>();
  

Я хочу просмотреть список и добавить все атрибуты к моему объекту, я имею в виду что-то вроде этого:

 log.setComment("comment one");
log.setUrl("http://google.com");
log.setTime("04:20");
  

Может быть, это невозможно, и я должен сделать что-то вроде следующего?

 List list= new List();
 LogEvidence object1= new LogEvidence ();
  object1.setComment("comment");
  object1.setUrl("http://url.com");
  object1.setTime(20);
lista.add(object1);
  

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

1. Вам нужно получить объект из списка, чтобы вызвать для него ваши методы доступа. log.get(0).setComment("blah blah"); возвращает первый элемент (индекс 0 ) из вашего списка и вызывает setComment

2. В идеале последний код является правильным способом

3. Неясно, что вы хотите сделать. Что log.setComment(...) нужно делать?

Ответ №1:

Вот как вы можете это сделать:

Создайте объект из LogEvidence .

 LogEvidence logEvidence = new LogEvidence();
logEvidence.setComentario("comment one");
logEvidence.setUrl("http://google.com");
logEvidence.setTiempo("04:20");
  

и добавьте его в список массивов.

 log.add(logEvidence);
  

Таким образом, вы можете создавать больше объектов и продолжать добавлять список. Поскольку ваш список называется как log , поэтому вы добавите в log

Объясняя это немного подробнее, это должно быть что-то вроде этого:

 List<LogEvidence> logEvidenceList = new ArrayList<>();

LogEvidence logEvidence1 = new LogEvidence();
logEvidence1.setComentario("comment one");
logEvidence1.setUrl("http://google.com");
logEvidence1.setTiempo("04:20");
logEvidenceList.add(logEvidence1);

LogEvidence logEvidence2 = new LogEvidence();
logEvidence2.setComentario("comment one");
logEvidence2.setUrl("http://google.com");
logEvidence2.setTiempo("04:20");
logEvidenceList.add(logEvidence2);

....
....
....
  

Или через вызов конструктора, это станет более кратким и читаемым.

 List<LogEvidence> logEvidenceList = new ArrayList<>();

LogEvidence logEvidence1 = new LogEvidence("comment one","http://google.com","04:20");
logEvidenceList.add(logEvidence1);

LogEvidence logEvidence2 = new LogEvidence("comment one","http://google.com","04:20");
logEvidenceList.add(logEvidence2);

....
....
....
  

Теперь, когда вы хотите извлечь объекты из списка, вы можете просмотреть список и получить один за другим, например;

 for (LogEvidence evidence : logEvidenceList) {
    System.out.println(evidence);
}
  

Для получения дополнительной информации о ArrayList

Ответ №2:

Как прокомментировал Кон, вы пытаетесь воздействовать на объект, который будет находиться в списке, а не на сам список.

Есть несколько способов сделать это, но поскольку у вас есть параметризованный конструктор, самым простым будет следующий:

 ArrayList<LogEvidence> log = new ArrayList<LogEvidence>();
log.add(new LogEvidence("comment one", "http://url.com", "04:20");
  

Что делается:

Мы создаем список с new ArrayList<LogEvidence>() помощью и присваиваем его переменной с именем log .

Затем мы создаем новый LogEvidence объект, уже назначая ему данные через параметры его конструктора, с new LogEvidence("comment one","http://url.com","04:20") помощью .

Поскольку он будет храниться в списке, мы можем использовать его анонимно. Мы добавляем его в список напрямую, используя метод списка .add(E e) , а не присваиваем его переменной.


В этом случае вам не нужно определять или назначать ненужные переменные.

И если вам нужно получить доступ к какому-либо конкретному LogEvidence из списка, вы можете использовать .get(int index) метод. В этом случае log.get(0) , для возврата первого элемента, будет возвращен объект, который вы только что вставили в приведенный выше пример кода.

Вы также можете использовать a FOR-EACH LOOP для итеративного воздействия на все объекты в списке. Вот пример, который печатает список:

 for (LogEvidence evidence : log) {
    System.out.println(evidence);
}