import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class list {
public static class FileUploadModel {
private String fieldName = null;
private String fileName = null;
public FileUploadModel(String fieldName, String fileName) {
this.fieldName = fieldName;
this.fileName = fileName;
}
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
FileUploadModel that = (FileUploadModel) o;
return Objects.equals(fieldName, that.fieldName) &&
Objects.equals(fileName, that.fileName);
}
@Override
public int hashCode() {
return Objects.hash(fieldName, fileName);
}
}
public static void main(String[] args) {
List<FileUploadModel> fileList = new ArrayList<>();
FileUploadModel file3 = new FileUploadModel("fieldName3", "fileName3");
fileList.add(file3);
List<String> boardList = new ArrayList<>();
boardList.add("fieldName1");
boardList.add("fieldName2");
boardList.add("fieldName3");
for(int i=0; i<boardList.size(); i++) {
FileUploadModel file = new FileUploadModel("fieldName" + (i+1), "fileName" + (i+1));
int idx = fileList.indexOf(file);
System.out.println(idx);
}
// 출력 결과
// -1
// -1
// 0
}
}
처음에 아무리 해도 idx값이 내가 원하는 대로 나오지 않았는데 알고보니
자바의 indexOf 메서드는 객체 리스트에서 지정된 요소의 인덱스를 검색하는 데 사용되는데
이 메서드는 내부적으로 equals 메서드를 사용하여 두 객체를 비교합니다.
기본적으로는 객체의 참조 값을 비교하지만 객체의 내용을 비교하려면
해당 객체의 equals 메서드를 오버라이드해야 한다고 한다.!!
FileUploadModel 클래스에서 hashCode, equals를 재정의해야 한다고 함
'프로그래밍 > Java' 카테고리의 다른 글
자바 synchronized (0) | 2024.03.29 |
---|---|
[Java] Jsoup를 이용한 웹 크롤링 (0) | 2023.06.15 |
[Java] "|" 를 구분자로 하여 split 하기 (1) | 2023.06.14 |
자바로 OpenAPI로 받은 XML 데이터 파싱하기 (0) | 2023.06.13 |
[JAVA] Map for-each 정리 (0) | 2023.06.08 |