Java에서 단독 연결 목록을 만들었습니다. 이 목록에는 푸시 된 첫 번째 항목이 갑자기 마지막으로 표시되는 항목이 있습니다.성능 향상 사용자 지정 단일 연결 목록 밀어 내기
터지는 성능은 대기열에 비해 좋습니다. 푸시 성능을 향상시키고 싶습니다. prepending 대신 push 방식으로 추가를 시도했지만 성능이 향상되지 않았습니다.
이 목록을 개선하는 방법에 대해 알고 계신가요?
푸시 팝 성능 (스택, ArrayList를하고 대기열은 java.util의 구현입니다) : 터지는
1000 만 정수 10 개 실행
- 은 스택 충전에 대해 평균 : 207.2ms
- 의 ArrayList 충전물 : 35.3ms
- 큐 F :
- 팝핑의 ArrayList를 574.0ms illing : 96.9ms
- myList에 충전 :
- myList에 터지는 4811.2ms :
- 터지는 큐 2642.2ms 50.5ms
public class MyList<T> {
T head = null;
MyList<T> tail = null;
boolean isNil = true;
public T pop() {
if(isNil) {
return null;
}
else if(this.tail.isNil) {
this.isNil = true;
return head;
}
else {
T head = this.head;
this.head = this.tail.head;
this.tail = this.tail.tail;
return head;
}
}
public void push(T element) {
MyList<T> item = new MyList<T>();
item.head = this.head;
item.tail = this.tail;
item.isNil = this.isNil;
this.head = element;
this.tail = item;
this.isNil = false;
}
}
나는 기존의 잘 알려진 표준을 사용하여 컬렉션 프레임 워크, 데이터 구조에 통합되었습니다. 얻을 수있는 성능 향상은 쿼리를 조정하거나 프로세스 간 호출을 줄이거 나 O (n^2) 알고리즘이 아닌 O (n) 알고리즘을 사용하여 실제 응용 프로그램에서 얻을 수있는 성능과 비교하면 어리석은 것입니다. –
@JBNizet 질문에 명확하게 언급되지 않았지만 이것이 숙제임이 의심 스럽습니다. 하나의 링크드리스트에 대해 이중 링크리스트가 작동하지 않는 경우가 많습니다. 표준 라이브러리에 구현되지 않은 이유가 있습니다. – corsiKa
회원의 이름을 오용하는 용어는 소스를 읽기 어렵게 만듭니다. 솔직히 머리를 쓰는 대신에 a와 b로 이름을 붙이면 읽기가 더 쉬울 것입니다. (실제로는 value로 작동합니다) tail은 next/succ로 사용됩니다. – Durandal