2011-04-24 3 views
0

저는 Ruby 개발자입니다. Android 플랫폼 덕분에 Java를 기회로 삼을 것입니다.2D 점, 배열, 목록 또는 기타를 처리하기위한 Java 데이터 구조?

2D 점 [p1, p2, p3, p4 ... p10]의 집합이 있는데, 집합의 순서를 바꾸고 점의 x 값에 따라 오름차순으로 정렬합니다.

points.insert(3, point) 

에 최고의 자바 연습 무엇입니까 : 나는 루비에서 기존 사이에 설정 새로운 포인트로 삽입 할 수 원하는

points.sort! {|a,b| a.x <=> b.x} 

: 루비에서 나는 같은 것을 할 것 이것을 성취합니까?

포인트를 배열에 저장하고 정렬 및 삽입 메커니즘을 설계해야합니까?

또는이 목적을 위해 이미 구조가 있습니까? (하나는 다른 요소를 삽입하는 단순화, 기존 요소 간 단순화 및 속성 별 요소 정렬)

인터넷을 통해 많은 Java 자원이 있다는 것을 알고 있지만 실천하고있는 사람들의 의견을 알고 싶습니다. 이런 종류의 문제.

답변

2

그것은 당신의 성능 요구 사항에 따라 달라집니다. 사용하려면 TreeSet과 같은 SortedSet 구현으로 이동하고 요소 x 값에 따라 정렬하는 Point 클래스 (또는 Point2D과 같은 기존 클래스의 경우)로 Comparator을 작성할 수 있습니다. 이렇게하면 O(log(n))에 요소를 삽입하고 검색 할 수 있습니다. 당신은 삽입을 많이 할 경우 Array의 중간에 n 개의 삽입이 n^2 비용을 가지고 있기 때문에, 당신은 Array을 사용하지 않도록

참고. 데이터를 업데이트하는 것보다 훨씬 많은 데이터를 트래버스하면 Array이 적합 할 수 있습니다.

+0

그래, 비교기 언급 및 구조, 좋은 대답, thx 남자 설명 – astropanic

2

귀하의 질문 (데이터 구조)에 대한 책 전체가 있지만, 간단하게하려고 노력할 것입니다. 힙 정렬, qucksort, 병합 정렬, 이진 트리 등과 같은 많은 옵션이 있습니다. 그러나 이러한 방법을 배우는 것보다는 간단한 내장 기능을 제안 할 것입니다.

Arrays.sort (pa); 원시적 순서를 사용해, 원시 형의 배열의 요소를 승순으로 소트합니다.

Arrays.sort (pa, from, to); 원시 타입의 요소 pa [from] ... pa [to-1]을 정렬합니다. 오름차순으로

Arrays.sort (oa); compareTo 메소드를 정의하는 Comparable 인터페이스에 의해 정의 된 순서를 사용하여 오브젝트 유형의 배열 요소를 오름차순으로 정렬합니다. String (StringBuffer는 아님), Double, BigInteger 등과 같은 많은 Java 클래스는 Comparable을 구현합니다.

Arrays.sort (oa, from, to); 배열의 요소를 오브젝트 유형의 ~ to 범위에서 오름차순으로 정렬합니다.

Arrays.sort (oa, comp); Comparator comp를 사용하여 객체 유형의 배열 요소를 오름차순으로 정렬합니다.

Arrays.sort (oa, from, to, comp); Comparator comp를 사용하여 객체 유형의 ~ to 범위의 배열 요소를 오름차순으로 정렬합니다.

import java.util.Arrays; 

public class Dblsrt { 
    //========================================================= main 
    public static void main(String[] args) { 
     //... 1. Sort strings - or any other Comparable objects. 
     String[] names = {"Zoe", "Alison", "David"}; 
     Arrays.sort(names); 
     System.out.println(Arrays.toString(names)); 

     //... 2. Sort doubles or other primitives. 
     double[] lengths = {120.0, 0.5, 0.0, 999.0, 77.3}; 
     Arrays.sort(lengths); 
     System.out.println(Arrays.toString(lengths)); 
    } 
} 

출력 :의

[Alison, David, Zoe] 
[0.0, 0.5, 77.3, 120.0, 999.0] 

칭찬, 대한 상세한 내용은 http://www.leepoint.net/notes-java/data/arrays/70sorting.html

http://www.theparticle.com/javadata2.html

+0

예, 데이터 구조에 관한 책은 알고 있지만 Java의 멍청한 점, Comparable 인터페이스의 경우, Point 클래스에서이 인터페이스를 구현 한 다음 해당 x 값으로 점별로 정렬 할 수 있습니다. – astropanic

+1

미안해, 내가 무례하게 굴지 않았다면. 행운을 빕니다! –