본문 바로가기
프로그래밍/Java

[Java] List<?> indexof (equals, hascode @Override)

by so5663 2023. 11. 4.
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를 재정의해야 한다고 함