>

현재 거래, 사용자 및 그룹의 세 가지 객체 클래스가 있습니다. 거래는 ID, 지불 한 사람, 날짜, 설명, 금액 및 관련 사용자 ID의 ArrayList를 수집합니다. 이것은 완벽하게 작동하지만 사용자를 반복하여 여러 사용자가 누구인지 찾는 방법을 통해 많은 코드 줄을 추가합니다. 내 질문은 ArrayList를 가질 수 있습니까? * partecipants = new ArrayList;다음은 모든 사용자에 대한 참조가 있습니까?

class Transaction{
    private static AtomicInteger count = new AtomicInteger(0);
    private int id = count.incrementAndGet();
    private String paid;
    private Date date;
    private String message;
    private Double amount;
    private ArrayList<Integer> users = new ArrayList<Integer>();

  • 답변 # 1

    짧은 예 :

    간단한 User 가 있다고 가정 해 봅시다.  수업 :

    public class User {
        private int id;
        private String name;
        // etc
    }
    
    

    그리고 원래 List 가 있다고 가정 해 봅시다.  이들 중 :

    List<User> users;
    
    

    ID로 사용자를 찾는 방법은 다음과 같습니다 :

    users.stream().filter(u -> u.getId() == id).findFirst();
    
    

    그러나 사용자 목록이 크면 느릴 수 있습니다.

    Map 에 사용자를 저장할 수 있습니다 :

    Map<Integer, User> usersById;
    
    

    이지도는 다른 물체만을 참조하므로 공간을 거의 차지하지 않습니다 (그러나 일부는 차지하지만 색인과 같습니다).

    이지도를 다음과 같이 채울 수 있습니다 :

    usersById = users.stream().collect(Collectors.toMap(User::getId, Function.identity()));
    
    

    또는 더 전통적으로 :

    usersById = new HashMap<>();
    for(User u : users) {
        usersById.put(u.getId(), u);
    }
    
    

    지금 아이디로 사용자를 찾으려면 이것을 O(1) 와 함께 사용할 수 있습니다  성능) :

    User user = usersById.get(id);
    
    

관련 자료

  • 이전 python - 목록 값을 정확히 같지 않은 데이터 프레임 열과 비교하려면 어떻게합니까?
  • 다음 mongodb 배열 내부의 중첩 문서 쿼리