2009-10-13 5 views
1

Iterable을 구현하는 클래스가 필요하며 동시 사용에는 안전 할 필요가 없습니다. 가장 가벼운 LinkedList, HashSet, ArrayList 등의 다양한 옵션 중에서?Java의 가장 가벼운 비 동시성 Iterable 구현은 무엇입니까?

유스 케이스를 명확히하기 위해 Iterable (일반적으로 3 또는 4)에 여러 객체를 추가 할 수 있어야합니다. 그런 다음 다른 객체를 반복해야합니다.

+0

가벼운 무게는 무엇을 의미합니까? 체중을 어떻게 측정합니까? –

+0

벤치 마크 결과는 무엇입니까? – starblue

답변

5

ArrayList Javadoc에서

add 작업은 상각 된 상수 시간으로 실행됩니다. 즉, n 개의 요소를 추가하려면 O (n) 시간이 필요합니다. 다른 모든 작업은 선형 시간 (대략 말하기)로 실행됩니다. 상수 요소는 LinkedList 구현에 비해 낮습니다.

+0

ArrayList는 중요한 요소입니다. 더 적은 가중치의 경우 가능할 때마다 생성자를 사용하여 올바른 용량을 지정하십시오. – erickson

+1

ArrayList도 좋을 것입니다. 캐시 지역. – starblue

2

전적으로 "가장 가벼운 무게"의 의미에 따라 다릅니다. 어떤 작업을해야하며 얼마나 자주합니까? 미리 최종 크기를 알고 있습니까? 실행 시간이나 메모리를 절약하려고합니까?

나는 ArrayList이 매우 좋은 선택이라고 동의합니다 ...하지만 큰 컬렉션을 만들고 나서 첫 번째 요소를 반복적으로 제거하려는 경우 매우 좋지 않을 것입니다. 많은 다른 컬렉션이 존재해야하는 좋은 이유가 있습니다. 서로 다른 상황에 대해 서로 다른 성능 특성을 가지고 있습니다.

1

그들은 모두 매우 다른 기능과 동작을 가지고 있으므로 사용 방법에 따라 선택해야합니다. 예를 들어, 무작위 액세스 및 높은 지역에 대해 ArrayList를 사용합니다. 정렬되지 않은 빠른 삽입과 질의가 필요하다면 HashSet을 사용하십시오.

0

'lightweight'로 '최상의 성능'을 의미하는 경우 컬렉션 사용 방법을 이해하지 않고도 대답하는 것이 거의 불가능합니다. 이 동시 사용을 지원하기 위해 필요로하지 않지만, 질문에 대답의 희망을 위해 우리가 얼마나 많은 개체가 될 것입니다

  • 같은 것들을 알아야 할 것이다에 대한 있도록 모든 당신이 우리에게 말 했어요
  • 읽기의 상대 주파수 무엇입니까 (평균) 컬렉션에 저장 및 쓰기 액세스
  • 는 랜덤 액세스는
  • 주문한 액세스 할 수있다 사람들의 숫자는 ArrayList를 제안했다

을 요구 필요 있다 베스트. 그러나 특정 패턴의 사용 패턴의 경우 임의 액세스의 페널티가 발생하지 않기 때문에 Queue이 List보다 성능이 우수하다는 것을 알 수 있습니다 (Effective Java 2 판). 즉, 임의의 순서로 목록에 항목을 추가/제거 할 수 있지만 대기열에있는 항목을 특정 순서 (예 : 꼬리 추가 및 머리에서 제거)로만 추가/제거 할 수 있습니다.

관련 문제