ArrayList에서 사용자 정의 클래스의 속성에 따라 객체를 찾습니다.

12028 단어 javaSE
오늘 학생 관리 시스템을 썼는데 너무 얕은 인식이 많아서 현재의 일부 수확을 기록해 두었습니다. 리모브와 contains는 equals를 호출했습니다. 대상의 속성에 따라 이 대상을 찾아서 조작할 때, 그리고 이 대상은 String 형식이 아니라 사용자 정의 클래스입니다. 이때 이 대상이 두 가지 방법을 호출할 때 만날 수 있습니다.
public class Test {
    public boolean remove(Object o) {
        Iterator<E> it = iterator();
        if (o == null) {
            while (it.hasNext()) {
                if (it.next() == null) {
                    it.remove();
                    return true;
                }
            }
        } else {
            while (it.hasNext()) {
                if (o.equals(it.next())) {
                    it.remove();
                    return true;
                }
            }
        }
        return false;
    }
}
public class Test {
    public boolean contains(Object o) {
        return indexOf(o) >= 0;
    }
    public int indexOf(Object o) {
        if (o == null) {
            for (int i = 0; i < size; i++)
                if (elementData[i] == null)
                    return i;
        } else {
            for (int i = 0; i < size; i++)
                if (o.equals(elementData[i]))
                    return i;
        }
        return -1;
    }
}

o는 상향 변환 대상이고 주소는 사용자 정의 클래스를 가리키며 사용자 정의 클래스는 부모 Object의 equals 방법을 다시 쓰지 않는다. 여기서 호출한 것은 Object의 방법으로 두 주소가 같은지 비교한다.따라서 대상의 속성을 비교하기 위해서는 이 equals 방법을 다시 써야 한다
@Override
public boolean equals(Object obj) {
	Student stu = (Student) obj;//                  
	return id.equals(stu.id);
}

용기에 지정한 속성을 포함하는 대상이 있는지 여부는 이렇게 쓸 수 있습니다
public class Student {
	private String name;
	private String id;
	@Override
	public boolean equals(Object obj) {
		Student stu = (Student) obj;
		return id.equals(stu.id);
	}
}
public class Work {
	public static void main(String [] args){
		private static ArrayList<Student> list = new ArrayList<>();
		Student stu = new Student("2018");
		if(!list.contains(stu)) {
			list.add(stu);
		}
	}
}

좋은 웹페이지 즐겨찾기