2012-10-16 4 views
4

this posting에 따르면 ListBuffer은 첫 번째 요소와 마지막 요소를 일정 시간 제거 할 수 있다고합니다. API 참조 및 ListBuffer 소스 코드를 살펴 보았습니다. 그러나 remove(0)이 첫 번째 요소에 대한 작업을 수행하는 동안 일정한 시간에 마지막 요소를 제거하는 방법을 찾을 수 없습니다. 마지막 요소를 제거하는 올바른 방법은 무엇입니까?ListBuffer에서 요소 제거

또 다른 질문 : ListBuffer를 반복하면서 요소를 효율적으로 제거 할 수 있습니까? 자바에서는

답변

1

첫 번째 질문은 가능하면 실망스러운 대답을 가지고 ... Iterator.remove() 함께 할 수 있지만 스칼라 반복자는 remove() 방법이 보이지 않는다 : 당신이 일정한 시간에 마지막 요소를 제거 할 수 없습니다, 그렇게하려면 마지막 요소 이전에 대한 참조가 필요합니다.

두 번째 질문은 똑같이 간단하고 실망 스럽습니다. 스칼라의 Iterator은 단순히 컬렉션의보기입니다. 기본 컬렉션을 수정하지 않습니다. (이것은 "기본적으로 불변의 가변 필요한 경우에만"철학을 유지입니다.)

+0

감사와 마지막 요소를 제거 할 수 있습니다. 그래서 기본적으로 ListBuffer에서 임의의 요소를 제거하기 위해 항상 O (n) 걸릴 것입니다. 그렇지 않습니까? 특정 요소를 가리키는 반복자로도 즉시 제거 할 수 없다는 점은 실망 스럽습니다. ( –

1

당신은 대답 렉스에 대한 trimEnd(1)

+0

답변을 주셔서 감사합니다, 올라프. 그러나 'trimEnd'는 O (n) 시간이 걸리는 것 같습니다. –