2010-02-12 2 views
0

MMSS : MM을 사용하여 날짜별로 객체의 ArrayList를 정렬 : HH 내가 객체의 ArrayList를을 가지고/DD/YY/형식

YEAR-DAY-MONTH HOUR:MINUTE:SECOND (example: 2010-02-10 23:32:14) 

내가 '다음과 같은 형식의 고유 한 날짜를 포함하는 각 배열 목록의 각 객체 (몇 천 개가 있음)와 두 시간이 일치하는지 확인하기 위해 만든 타이머 클래스를 비교하려고합니다. 객체와 타이머가 일치하는 날짜를 가지고 있는지 확인하는 것이 가장 쉬운 방법 인 것 같습니다. 배열 목록을 가장 먼저 정렬하고 가장 먼저 배열 목록을 정렬 한 다음 각 객체를 개별적으로 확인한 다음 목록의 다음 항목으로 이동합니다. 시간제 노동자. 그러나 앞서 언급 한 시간 형식을 기반으로 배열 목록을 정렬하는 방법을 잘 모르겠습니다. 지금까지, 내 ​​일자 객체에는 다음과 같은 속성을 가지고 있습니다 :

public float min; 
public float hour; 
public float day; 
public float month; 
public float year; 

어떻게이에 이른 최근 날짜에서 분류 한 그래서 나는이 객체의 배열 목록을 정렬 할 수 있을까?

답변

4

잠재적 간단한 해결책

당신이 여기에 바퀴를 재발 명하고 나에게 보인다. 이미 날짜와 시간을 나타내는 유형이 많이 있습니다. 자신 만의 시간을 만들면 고통을 겪을 수 있습니다. 이 경우 을 Joda Time에서 사용하는 것이 좋습니다. 하지만이 문자열에 대해 아무것도 볼 수 없습니다 - 우리가 정말 문자열을 상대하고있는 것처럼 당신은 "형식"을 언급 실제 질문

응답

.

float 값을 사용하고 있습니까? 자연의 정수처럼 보입니다. 초를 원하지만.

Comparable<T>을 매우 쉽게 자연스럽게 구현할 수 있습니다. 그러면 Collections.sort으로 전화하면 올바른 일을 할 수 있습니다. 여기 Comparable<Foo>의 샘플 구현하여 유형을 가정하는 것은 Foo이라고,이다 : 대신 Comparer<T>을 구현하는

public int compareTo(Foo other) 
{ 
    if (other == null) 
    { 
     throw new NullPointerException(); 
    } 
    if (year < other.year) 
    { 
     return -1; 
    } 
    if (year > other.year) 
    { 
     return 1; 
    } 
    if (month < other.month) 
    { 
     return -1; 
    } 
    if (month > other.month) 
    { 
     return 1; 
    } 
    // etc 
    // If we haven't returned after comparing everything 
    // then the values must be equal 
    return 0; 
} 

chburd의 대답은 똑같이 유효합니다; 당신의 객체가 인 경우 날짜/시간이면 자연 정렬 순서가 있으며 Comparable<T>이 아마도 더 나은 선택 일 것입니다. 실제로 개체에 더 많은 속성이 있고 그 대신에 정렬하려는 경우 Comparer<T>을 사용하는 것이 좋습니다.

6

1 - 개체에 대한 Comparator 만들기

2 - 그럼, 이것은 너무 단순한 해답이 될 수 있지만, 왜 단지 트리 맵에 값을 넣어하지 않을 수 있습니다

0

이러한 개체의 목록에 Collections.sort를 사용 시작하기?

TreeMap<Date, Date> sortedMap = new TreeMap<Date, Date>(); 
    List<Date> listOfObjectsToSort = new ArrayList<Date>(); 
    for (Date theDate : listOfObjectsToSort) 
    { 
     sortedMap.put(theDate.getTime(), theDate); 
    } 
    List<Date> sotedList = (List<Date>) sortedMap.values(); 

트리 맵은 오랫동안 정렬 할 수 있습니다.

arraylist에서 Comparator를 사용할 수있을 때 목록의지도를 만드는 것이 더 비쌉니다.

(이제 커피를 마시고 다시 읽음)