[자바의 정석] Chapter11. 컬렉션 프레임웍과 유용한 클래스
1.2 동기화(Synchronization)
JDK 1.2 이전 클래스들은 자체적으로 동기화 처리가 되어있는데, 멀티 쓰레드 프로그래밍이 아닌 경우에는 불필요한 기능이 되어 성능을 떨어뜨리는 요인이 있다.
Vector -> ArrayList
HashTable -> HashMap
새로 추가된 ArrayList, HashMap은 자체적으로 동기화 처리를 하지 않는다.
java.util.Collection 인터페이스
java.util.Collections 클래스
List list = Collections.synchronizedList(new ArraryList());
Vector클래스의 elementData라는 이름의 Object배열을 멤버변수로 선언
자손크래스에서 elementData에 접근이 가능하도록 하는 새로운 클래스를 작성할때 자손클래스에서 elementData에 접근이 가능하도록 접근 제어자를 private 대신 protected 사용
for문의 카운터를 0부터 증가시킨 것이 아니라, list2.size()-1부터 감소시키면서 거꾸로 반복
카운터를 증가하면서 삭제하면, 한 요소가 삭제될 때 마다, 빈 공간을 채우기 위해 나머지 요소들이 자리이동을 하기 때문에 올바른 결과를 얻을 수 없다.
그래서 카운트를 감소시켜가면서, 삭제를 해야 자리인동이 발생해도 영향을 받지 않고 작업이 가능하다.
Java API - deep copy, shallow copy
deep copy : 깊은 복사
shallow copy : 얕은 복사
배열이나 객체를 복사할 때, 단순히 참조함 복사하는 것을 shallow copy,
원본과 같은 데이터를 저장하고 있는 새로운 객체나 배열을 생성하는 것을 deep copy라고 한다.
그래서 shallow copy가 되면, 원본이 변경되면, 복사본도 같이 변경되는 것과 같은 결과를 얻고,
deep copy의 경우 원본의 데이터가 바뀐다 할지라도 복사본은 완전히 독립적인 객체이므로 전혀 영향을 받지 않는다.
'개발자 > 자바' 카테고리의 다른 글
[자바의 정석] Chapter15. 네트워킹(Networking) (0) | 2015.07.26 |
---|---|
[자바의 정석] Chapter1. 자바 시작 (0) | 2015.07.26 |
자바 jdk 버전 바꾸기 (0) | 2015.07.15 |
JSP에서 소수점 처리 (0) | 2013.07.24 |
[eclipse] 맥용 이클립스 Content Assist 설정 변경 (0) | 2013.07.18 |