2010-06-05 6 views
7

현재 Java Collections API를 배우고 있으며 기본적인 내용을 잘 알고 있지만이 표준 API에 Graph 구현이 포함되지 않은 이유를 알지 못했습니다. 세 가지 기본 클래스는 쉽게 이해할 수 있으며 (List, Set 및 Map) API의 모든 구현은 대부분 간단하고 일관성이 있습니다.Java Collections API에 Graph 구현이 포함되어 있지 않은 이유는 무엇입니까?

주어진 문제를 모델링 할 수있는 잠재적 인 방법으로 그래프가 얼마나 자주 나오는지 고려하면 이는 나에게 의미가 없습니다 (API에 존재할 수 있으며 물론 올바른 위치를 조사하지 않을 수도 있음).). Steve Yegge는 블로그 게시물 중 하나에서 프로그래머는 문제를 공격 할 때 먼저 그래프를 고려해야하며 문제 도메인이 자연적으로이 데이터 구조에 맞지 않으면 대체 구조를 고려해야한다고 제안합니다.

그래프를 나타낼 수있는 보편적 인 방법이 없거나 인터페이스가 유용하여 API 구현에 충분하지 않을 수 있다는 것입니다. 그러나 그래프를 기본 구성 요소 (정점 및 일부 또는 모든 정점을 연결하는 모서리 세트)로 줄이고 그래프가 일반적으로 구성되는 방식 (addVertex (v) 및 insertEdge (v1, v2)과 같은 메소드)을 고려한 경우,) 일반적인 그래프 구현이 가능하고 유용 할 것으로 보인다.

이 점을 이해해 주셔서 감사합니다.

+1

Java API에는 많은 구멍이 있습니다. 그들에게 이유가있을 필요는 없습니다. – skaffman

+1

Java SE API는 추가 빌드를위한 * 기본 * API 만 제공합니다. 이것이 바로 Java SE API를 기반으로 더 많은 특정/편리한 "제 3 자"API가 존재하는 이유입니다. – BalusC

답변

12

일부 특수 그래프가 Collection Framework, 특히 링크 된 목록과 트리에 포함되어 있습니다.

일반적인 그래프 구현이없는 이유는 다음과 같습니다. 그래프는 매우 다양한 형태와 특성을 지니고 있기 때문에 일반적인 그래프가 유용하지 않을 수도 있습니다.

또한 지금까지는 적어도 지금까지 그래프에 대한 필요성을 느껴 보지 못했습니다. 일부 도메인은 분명히 필요로하지만, 그렇지 않은 도메인도 있습니다. (지금까지 여러 분야에서 12 개 이상의 프로젝트가 진행되었지만 실제로는 그래프가 필요한 2 개를 자세히 설명합니다.) 그래서 Java 커뮤니티에서 일반적으로 콜렉션에 그래프를 작성하라는 큰 압력은 없었던 것 같습니다 뼈대. 여기에는 "거의 모든 사람"이 "거의 항상"필요로하는 기본적인 내용 만 들어 있습니다. 그리고 그 장점 중 하나는 실제로 (상대적인) 간명함과 명료성입니다. 저는 디자이너가 디자이너가 보존 할 자산으로 여긴다 고 생각합니다.

+1

+1. 그래프는 많은 특정 알고리즘, 데이터 구조 등에서 공통적으로 추론 할 수있는 방법을 제공합니다. 코드 작성과 관련해서는 실제로 "그래프"클래스를 필요로하지는 않지만 매우 구체적인 속성을 가진 그래프를 원합니다. –

관련 문제