2014-06-24 5 views
2

Java/Grails GORM 응용 프로그램에서 다음을 수행해야합니다. , 0,1,2 :모든 항목의 색인을 동시에 업데이트하면서 목록 항목을 이동할 수 있습니까?

class Item { 

    int position 
    String name 

} 

내가 위치를 업데이트 할 수있는 항목의 목록을 만들 수는 목록의 각 항목의 인덱스를 나타내는하도록 속성 :

나는 도메인 클래스 항목을 3, ... 각 위치는 고유합니다. 즉, 각 위치는 하나의 항목 일 수 있습니다.

항목의 순서를 변경할 수 있어야합니다. 이 전 항목의 다음과 같은 목록을 가지고 거기에 배치 가정 해 봅시다 :

A1, A2, A3, A4, A5 
1 2 3 4 5 

내가 A4 위치 2에 있어야 할 때 나는 각각 A2, A3와의 위치를 ​​업데이트해야합니다. 즉, 세 개의 데이터베이스 항목 인 A4, A2 및 A3을 업데이트해야합니다. 목록이 매우 길면 많은 업데이트가 필요합니다.

  1. 나를위한 목록 요소의 위치 조정을 처리하는 데이터 구조가 있습니까?
  2. 항목을 효율적으로 업데이트하려면 어떻게해야합니까?
+0

요소를 삽입하고 모든 변경 사항을 색인으로 만드는 목록과 같은 의미입니까? 위치가 항목의 요소 여야하는 이유는 무엇입니까?이 항목에 대한 컨테이너가 위치를 관리하지 않아야합니까? –

+1

항목이 위치를 저장하는 이유는 무엇입니까? 대신에 객체의 위치에 대한 데이터 구조를 요청하면 여러 업데이트에 대한 이슈가 없습니다. – pwilmot

+0

@PeterLawrey 예 인덱스가 자동으로 변경되는 목록을 의미합니다. – confile

답변

0

귀하의 int position은 항상 순서대로 유지되므로 잊어 버려서 데이터 구조의 색인을 사용하여 위치를 얻을 수 있습니다. 인덱스가 0에서 시작하므로 1을 더하십시오. LinkedList<String> 또는 ArrayList<String>을 사용하십시오. 그것들은 거의 동일 할 것입니다. 어느 쪽이든 당신은 어떤 종류의 O (n) 연산을 가지게 될 것입니다. 목록을 탐색하지 않아도 될 수는 없습니다.

각 데이터 구조의 효율성에 대해 자세히 설명하기보다는 this post은 매우 철저한 요약을 제공합니다.

+0

GORM에서 위치 업데이트를 어떻게 매핑합니까?나는 목록의 색인을 사용할 수 있다는 것을 알지만 이것은 사소한 일이지만 여전히 메모리에있다. – confile

0

네트워크를 통해 목록 항목을 식별하는 방법이 필요합니다. 목록 색인 대신 UUID를 사용하여 요소를 확인했다고 생각하십니까? 그런 식으로 목록의 순서가 변경 될 때 요소의 ID를 수정할 필요가 없습니다. 당신은 자동으로 요소를 주문에 관해서는

UUID.randomUUID() 

를 호출하여 새 UUID를 얻을 수 있습니다, 그 목록의 주요 임무 중 하나입니다. 목록이없는 경우 요소는 색인 값을 업데이트하기 위해 서로를 알아야 할 필요가 있습니다. 그러면 삽입 된 연결 목록이 구현됩니다.

관련 문제