2012-04-21 7 views
1

초당 몇 번 (아마 100/200ms 정도) 업데이트 될 그래프를 표시하는 작은 프로그램을 계획하고 있습니다. 그 목적은 그래프에 1000 가지가 넘는 값을 플롯 (plot)하는 것입니다. XY 플롯과 같습니다.배열 작업, 끝에 요소 추가, 다른 요소를 뒤로 밀어

배열에 1000 개의 요소가 포함되어 있으면 끝에 새 요소를 추가하고 다른 모든 요소를 ​​한 단계 뒤로 밀어 넣는 과정에서 추가하고 싶습니다. 본질적으로 엘리먼트 999는 998이 될 것이고 998은 997이 될 것입니다 ... 첫 번째 엘리먼트로가는 길이면, 그냥 버려집니다. 누구든지 정규 배열, 벡터, LinkedList 또는 다른 방법 중 하나를 사용하여 예제 또는 좋은 알고리즘이 있습니까?

첫 번째 생각은 새 배열을 만들고 유지하려는 요소를 복사하여 처음 100 개의 요소를 버리는 것입니다. 이 시점에서 배열의 끝에 100 개의 새로운 요소를 추가하고이 프로세스를 계속 반복하지만이 작업을 더 효과적으로 수행해야합니다.

+1

마지막에 새 요소를 추가하고 첫 번째 요소를 제거하기 만하면됩니까? – erikxiv

답변

1

알고리즘 월드에서는 양 끝 벡터라고 부르는 것을 deque라고합니다.

당신이 필요로하는 것은 class입니다.

기본적으로 deque는 시퀀스의 시작과 끝 모두에서 요소를 추가하고 제거 할 수 있습니다.

EDIT 실제로 설명서를 읽으면서 squek의 deque 구현이 직접 인덱싱을 지원하지 않는다는 것을 알게되어 놀라웠습니다 (C++에서이 구조를 사용하는 데 익숙합니다). 그래서 계속해서 검색을하고 this answer을 찾았습니다. this library,에 연결하면 도움이 될 것입니다.

+0

감사합니다.이 프로젝트에 필요한 메소드가 있으므로 ArrayDeque를 사용하여 구현을 시도해 보겠습니다. 도움에 다시 한번 감사드립니다. – user1240989

1

배열을 사용하지 마십시오. 모든 요소를 ​​이동하는 복잡성은 끔찍합니다! 이 작업에 가장 적합한 Java 데이터 구조는 Deque입니다.

0

동일한 어레이를 계속 재사용하고 처음부터 다시 시작합니다. 자신을 더 명확하게하려면 요소 배열이 있다고 가정 1..1000

int[] array = new int[1000]; 
... 
array = {1, 2, ...., 1000 }; 

이제 배열 대신 {2, 3, ..., 1000을 가지고 노력하는, 요소 1001를 추가해야하는 경우 , 1001}, 배열 {1001, 2, 3, ... 1000}을 찾고 배열이 실제로 시작하는 인덱스를 추적합니다. 이렇게하면 begin-index에 간단한 카운터를 유지하여 모든 요소를 ​​이동하는 데 따르는 어려움을 대체합니다. 자신을 쉽게 만들려면

private int startIndex = 1;//0 at the start 
//I assume we are in the situation with array {1001, 2, 3, ..., 1000 } 

public int convertIndex(int index){ 
    return (index + startIndex) % 1000; 
} 
관련 문제