2012-01-05 3 views
0

나는 사람들의 명단과 도착 시간을 정당에 알릴 필요가있다. 그리고 그들이 떠날 때 나는이 명단에서 벗어나야한다. (최대 파티는 150입니다.)더 나은 설정, 배열 또는 목록은 무엇입니까?

세트를 사용하면 같은 사람을 두 번 추가하지 않아도됩니다.
목록을 사용하면 목록에 몇 개의 공백이 있으면 목록을 시작할 수 있습니다 (아무도 나타나지 않는 경우).
배열 (배열이 무엇인지는 모르지만)을 자주 사용했습니다.

제 생각에는 이름이 2 열이고 시간이 몇 군데입니다. 누군가 들어올 때, 나는 한 사람의 이름을 다른 사람의 이름으로 저장합니다. 그/그녀는 내가 그/그녀의 이름을 검색 할 때 그것을 삭제하고 다른 배열에 시간을 삭제하는 동일한 색인을 사용합니다.

목록에는 2 개의 요소로 이루어진 하나의 배열이있을 수 있습니다. 그런 다음 한 위치에만 추가해야하지만 검색은 좀 더 복잡합니다.

아니면 너무 복잡하게 만들었습니까?

+1

시간을 값으로하여 사람이 입력 한지도는 어떻습니까? –

+0

2 개의 어레이가 필요하지 않습니다. Person {time, name}의 배열을 가질 수도 있습니다. – Adrian

+0

데이터에서 수행하려는 작업은 무엇입니까? 입력은 어떻게 생겼습니까? – Adrian

답변

5

지도 구현 :

public final class Person 
{ 
    ... remainder left to the student ... 
} 

Map<Person, Date> currentPartyAttendees; // date is arrival time. 

설정 구현 :

public final class PartyAttendee 
{ 
    ... person details ... 
    Date arrive; 

    int hashcode() 
    { 
    ... use Apache HashCodeBuilder ... 
    } 

    boolean equals(Object other) 
    { 
    ... implementation left to student. Use Apache EqualsBuilder ... 
    } 
} 

Set<PartyAttendee> currentPartyAttendees; 
0

나는 배열을 사용할 수도 있고, 대신에 두 개의 배열을 사용할 수 있다고 생각한다. 'Person'모델의 배열을 사용하여 사람의 이름을 저장하고 시간을두고 시간을 남긴다. 배열에 삽입하기 전에 목록에이 사람이 이미 포함되어 있는지 확인할 수 있습니다.

PS : 모델에 등호()와 hashCode()를 덮어 쓰기하는 것을 잊지 마세요

1

하고자했다 HasMap 사용 사용자의 이름을 키로 사용하여 항목을 추가 및 검색 할 수 있으므로 일정한 시간 성능을 제공하므로 세트가 얼마나 커 졌는지에 관계없이 성능이 다시 향상되어야합니다 주요 일관성.

1

사용 사례를 설명한 방법으로 HashMap 또는 다른 Map 기반 구현을 고려하지 않으시겠습니까?

물론, 사용자가 List [또는 이와 유사한] 기반 데이터 구조를 사용하는 바인딩이없는 한.

1

리스트 <>을 사용하고 데이터 구조는 게스트를 나타냅니다. Subclass List를 사용하여 도착 시간과 출발 시간을 표시하고 메소드를 추가/제거 할 수 있습니다. set을 사용할 수도 있지만 hashCode 및 equals 메서드를 생성해야합니다. 난 당신이, 사람이 같은 이름을 가질 수있다 야기하고 싶지 확실하지 않다

public Class Guest{ 
    private String firstName, lastName; 
    private long arrivalTime, departureTime; 
    .... 
} 

public class MyGuests extends ArrayList<Guest>{ 
    @Overide 
    public void add(Guest g){ 
    //record arrival time here 
      super.add(g) 
    } 
    @Overide 
    public void remove(Guest g){ 
    //record departure time here 
      super.remove(g); 
    } 
} 
0

LinkedHashMap (당신은 SSN, bday, 중간 이름 등 같은 다른 데이터가 없다면) - 키 - 값 쌍의 컨테이너를 그 삽입 순서를 유지합니다. 키는 사람 (단순한 String 또는 지정된 클래스)이며 값은 도착 시간입니다 (예 : a Date.

관련 문제