[컴][java] ArrayList 는 내부적으로 arraycopy 를 한다.

너무 기본적인 사항이라 정리하는 것이 이상할 지 모르나, 모든 자료는 언제든 찾게 될 일이 있을지 몰라 정리해 둔다.

 

아래 같은 경우 주의할 점은  ArrayList 의 add() 이다. add() 는 내부적으로 arraycopy 를 호출한다. 그래서 만약 아래처럼 하나는 ArrayList 에 넣고, 하나는 map 에 넣어서, 나중에 map 을 indexing 이 이용하려고 할 때는 문제가 생긴다.

각자 다른 Object 를 가리키고 있기 때문이다. 그러므로 ArrayList 와 같이 사용하려 한다면, 아래처럼 ArrayList 의 index 값을 가지고 사용하는 것이 더 나은 방법인 듯 하다.

참고로 HashMap 의 put() 은 copy 를 하지 않는다.

private final ArrayList<Article> mArticles;

private Map<String, Integer> mHmap = new HashMap<String, Integer>();
private Map<String, Article> mtest = new HashMap<String, Article>();


public void addItem(Article article) {
mArticles.add(article);
mHmap.put(article.title1, mArticles.size()-1);

mtest.put(article.title1, article); // 문제의 소지가 있다.


}
 public void setChecked(String title, int checked) {
int i = mHmap.get(title);
mArticles.get(i).checked = checked;

}

댓글 없음:

댓글 쓰기