태그 보관물: api-design

api-design

Java 콜렉션 API에 마지막 방법이없는 이유는 무엇입니까? [닫은]

이것은 java.util.List와 같은 정렬 된 컬렉션을위한 것입니다. 언어 디자이너가 왜 마지막 방법을 포함하지 않았습니까? 내가 생각할 수있는 유일한 이유는 다음과 같습니다.

  • 컬렉션이 비어있을 때 모호함 (널 리턴 또는 예외 예외)
  • API 팽창

다른 이유가 있습니까?



답변

API 팽창이 아마도 답일 것입니다. 내 경험상이 기능이 필요한 유일한 시간은 대기열 또는 스택이 적절한 방법을 가진 작업에 대한 올바른 데이터 구조였습니다.


답변

last()방법만큼이나 쉽다 list.get(list.size()-1)더이없는 것처럼, first()방법 또는 fifth()방법. 합성하기가 어렵지 않고 전문화되어 있습니다. 당신은 또한 reverse()목록과 항목 list.get(0)을 줄 것입니다 수 있습니다 last. 수행하기 쉬운 것은 일반적으로 고유 한 방법을 얻지 못합니다.

import java.util.ArrayList;
import java.util.List;

public class Main
{
    public static void main(String[] args)
    {
        final List<String> l = new ArrayList<String>();

        l.add("A");
        l.add("B");
        l.add("Z");

        System.out.println("l.get(0) = " + l.get(0));
        System.out.println("l.get(l.size()-1) = " + l.get(l.size() - 1));
    }
}

결과는 다음과 같습니다.

l.get(0) = A
l.get(l.size()-1) = Z

또한 List인터페이스 를 구현하는 모든 것이 실제로 last()어떤 개념을 가지고 있다고 가정하는 것도 전제 입니다.


답변

java.util.LinkedList정의 getLast()getFirst()방법을. 불행히도 이러한 메소드는 인터페이스 중 하나에 정의되어 있지 않으므로 LinkedList 유형을 사용해야합니다. 마지막 요소에만 관심이 있다면 java.util.Queue인터페이스의 peek()방법 을 사용하는 것이 좋습니다 . LinkedList는 큐를 구현합니다.


답변

기본적으로 당신이 중 하나를 요청해야 size()A에 대한 for반복자를 요청하고 한 동안 그것을 사용하거나 할 – 루프에 의해 -loop 또는 반복 처리 그것. 목적에 맞는 것을 사용하십시오.

반복자는 주어진 지점에서 더 많은 항목이 있는지 알고 있으며 다음 항목이 있으면 얻을 수 있습니다. 그런 다음 “더 많은 항목이 있습니까?”까지 반복하십시오. 실패합니다.

http://download.oracle.com/javase/tutorial/collections/interfaces/collection.html 의 “Traversing Collections”섹션을 참조하십시오.


답변