2016-06-19 7 views
2

Java에서 Aaron William의 Multiset Permutation 알고리즘을 구현하고 싶습니다. Algorithm Whitepaper. 알고리즘은 링크 된 목록을 사용하여 멀티 세트를 나타 내기 때문에 여러 연결된 목록 노드에 대한 여러 포인터를 유지하고 헤드 노드를 추적하며 포인터에서 다음 노드를 가져 오는 것이 중요합니다.Java LinkedList 노드 조작

기본 제공 LinkedList 구현에서 이러한 기능을 제공하지 않는다는 것을 알고 있습니다. 나는 또한 자신의 링크 된 목록 구현 롤링이 작업을 위해 사소한 것으로 알고 있습니다. 그러나 List 인터페이스를 존중하기 위해 모든 상용구 코드를 작성하는 일은 그리 간단하지 않습니다. Collections.Sort를 사용하여 목록을 정렬하고 싶다고 해봅시다. 또한 어떤 컬렉션의 입력에서 내 별도의 목록 구현을 저장하기 위해 어느 정도 수준의 저장소 중복이있을 것이라는 사실을 알게되었습니다.

내 질문 : 거기에 다른 이러한 기능을 제공하는 네이티브 Java 데이터 구조? 확실히 내 목표는 내 자신의 링크 된 목록 구현을 요구할 정도로 충분히 독특하지 않다.

+1

나는 있다고 생각하지 않습니다 심지어 정렬 알고리즘을 구현하는 것조차도 사용자가 원하는대로 노드를 조작 할 수있는 방법으로 자체 링크 된 목록을 구현하는 것이 더 좋습니다. 자바의 링크드 목록은 필요한 것이 아닙니다. – Alan

+1

자바의'LinkedList'에 대한 것은 링크 된 목록으로 설계되지 않았습니다 ** ** List 인터페이스 **의 또 다른 구현입니다 **. 그것은 링크드리스트 데이터 구조 **를 사용하기 때문에'LinkedList'라는 이름이 붙었습니다 ** 그러나 그것은 ** 실제'Node'의 **에 접근 할 수 없기 때문에 모두입니다. – Onur

+0

필자가 고득점으로 배웠던 것은 원래의 소스 코드를 작성자에게 전자 메일로 보낼 수 있다는 것입니다. 그렇게하면 자신 만의 것을 만들지 않고 저자의 작품에 관심을 표명 할 수 있으므로 네트워크가 커지게됩니다. –

답변

0

Java LinkedList 노드 항목이 공개되지 않아 일부 사용 사례에 적합하지 않습니다. 즉, 특정 위치에서 특정 요소를 찾거나 제거하거나 추가하는 것이 비용이 많이 든다. 효율적으로 항목을 제거하고 목록의 맨 위로 밀어 넣으려면 노드 액세스가 필요한 것과 비슷한 문제가있었습니다.

필자는 특수 이중 링크 목록 구현을 제안했습니다. 요소에 직접 노드 구조를 저장합니다. 즉 요소는 노드에서 파생됩니다. 이것은 목록 조작에는 메모리 할당이 필요하지 않다는 장점이 있습니다. 그러나 요소가 하나의 목록에만 포함될 수 있다는 단점이 있습니다. 당신이 당신의 요소에서 노드를 저장하지 않으려면 그냥 요소를 보유하고 래퍼 노드 클래스를 ... 만들

구현 : DoubleLinkedList 시험 : DoubleLinkedListTest