본문 바로가기
Back-End/Java

TIL 230531 : ArrayList와 가까워지기.

by 우인입니다 2023. 5. 31.

나의 1시간을 가져간 허무한 에러

static ArrayList<Product> orderArrayList;

static double getTotalPrice() {
    double total = 0;
    for (Product product : orderArrayList) {
        total += product.getPrice();
    }
    return total;
}

ArrayList 안에 Product 형태의 데이터를 받는 'orderArrayList'를 하나 생성했다.

밑에 List안에 받아둔 객체들안에 double형태의 price를 가져오는 getPrice()메소드를 반복실행할 수 있게 코드를 짰다.

 

iterator()를 호출할 수 없다고 한다.

아직 ArrayList가 비어있어서 그런가. 근데 초기화값인 것과 null로 나오는 건 다른 개념같았다.

 

선언과 초기화를 동시에 해야하지 않았던 예전 모습과 비슷해서 생성자를 통해 간단히 해결했다.

static ArrayList<Product> orderArrayList; // 변경 전

static ArrayList<Product> orderArrayList = new ArrayList<>(); // 변경 후
생각해보면 당연하다. 데이터 형태만 잡아준거고, 거기에 생성자를 통해 준비된 메모리에 값을 넣어줬어야 하는 건데.

사실 저것 때문에 엄청 꼬여서 iterator부터 제네릭과 arrayList, set, map 등 자료구조를 다시 공부하게 된 고마운 계기였다.

덕분에, 객체들을 자료구조로 다룰 수 있다는 점과 생성자의 개념을 다시 직관적으로 이해할 수 있게 됐다.

 

아래는 자꾸 찾게되서 참고용으로 붙여두는 주요 메소드

  • .add((index), val): 순서대로 리스트를 추가, 배열 사이즈 초과 시 초기 설정된 사이즈만큼 자동으로 사이즈가 증가함, 인덱스를 추가로 지정해주면 해당 인덱스에 값을 삽입
  • .get(index): 해당 인덱스의 값 반환
  • .set(index, val): 인덱스로 값 변경
  • .indexOf(val): 값을 제공하면 해당 값의 첫번째 인덱스를 반환
  • .lastindexOf(val): 해당 값의 마지막 인덱스 반환
  • .remove(index or val): 해당 인덱스의 값 or 해당 값 중 첫번째 값 삭제
  • .contains(val): 해당 값이 배열에 있는지 검색해서 true / false 반환
  • .containsAll(val1, val2...): argument로 제공한 컬렉션의 모든 값이 포함되어 있는지 여부를 true / false로 반환
  • .toArray(): ArrayList 타입의 인스턴스를 일반 배열 타입으로 반환, 저장할 배열 타입에 맞춰 자동 형변환, 배열 크기 또한 자동으로 맞춰서 바꿔줌
  • .clear(): 값 모두 삭제
  • .isEmpty(): 비었으면 true, 하나라도 값이 있으면 false 반환
  • .addAll(arr2): 두 컬렉션을 합침
  • .retainAll(arr2): argument로 제공한 컬렉션 내에 들어있는 값을 제외하고 모두 지워줌
  • .removeAll(arr2): argument로 제공한 컬렉션 내에 들어있는 값과 일치하는 값을 모두 지워줌, retainAll() 메소드와 반대
  • .size(): 요소 개수 반환