문제

의 근본적인 차이점은 무엇입니까? Set<E> 그리고 List<E> 인터페이스?

도움이 되었습니까?

해결책

List 반면에 순서대로 일련의 요소입니다 Set 정렬되지 않은 뚜렷한 요소 목록입니다 (감사합니다. 퀸 테일러).

List<E>:

순서 컬렉션 (시퀀스라고도 함). 이 인터페이스의 사용자는 각 요소가 삽입되는 위치를 정확하게 제어합니다. 사용자는 정수 지수 (목록의 위치)로 요소에 액세스하고 목록의 요소를 검색 할 수 있습니다.

Set<E>:

중복 요소가없는 컬렉션. 보다 공식적으로, 세트에는 e1.equals (e2) 및 최대 하나의 널 요소가되도록 한 쌍의 요소 E1 및 E2가 포함되어 있지 않습니다. 이름으로 암시 된 바와 같이,이 인터페이스는 수학적 세트 추상화를 모델링합니다.

다른 팁

╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║                   ║         List         ║            Set              ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║     Duplicates    ║          YES         ║            NO               ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║       Order       ║       ORDERED        ║  DEPENDS ON IMPLEMENTATION  ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║         YES          ║            NO               ║ 
╚═══════════════════╩══════════════════════╩═════════════════════════════╝

주문한 요소 목록 (고유 여부)
Java의 인터페이스를 준수합니다 List
색인으로 액세스 할 수 있습니다

명백한 사용

  • Linkedlist
  • 배열 목록

고유 한 요소 목록 :
Java의 인터페이스를 준수합니다 Set
할 수 있다 ~ 아니다 색인으로 액세스하십시오

명백한 사용

  • 해시 (해시)
  • LinkedHashSet (주문)
  • 트리셋 (자연 순서 또는 제공 비교기별로 정렬)

두 인터페이스 Set 그리고 List Java의 인터페이스를 준수합니다 Collection

세트는 목록이 할 수있는 동안 중복 요소를 포함 할 수 없습니다. 목록 (Java)도 주문을 의미합니다.

  • 목록은 주문 된 항목 그룹입니다
  • 세트는 복제물이 허용되지 않은 항목의 변하지 않는 그룹화입니다 (보통)

개념적으로 우리는 일반적으로 복제를 백로 허용하는 변하지 않는 그룹화를 말하며 복제물이 세트를 허용하지 않습니다.

목록

  1. 요소의 순서 그룹입니다.
  2. 목록은 복제본이있는 요소 모음에 사용됩니다.
  3. 새로운 메소드는 목록 인터페이스 내부에 정의됩니다.

세트

  1. 요정이없는 요소 그룹입니다.
  2. 세트는 복제없이 요소 모음에 사용됩니다.
  3. 내부 세트 인터페이스 내부에 정의되지 않으므로 세트 서브 클래스와 함께 수집 인터페이스 메소드를 사용해야합니다.

목록:

Lists는 일반적으로 중복 객체를 허용합니다.ListS는 주문되어야하므로 인덱스에 의해 액세스 할 수 있습니다.

구현 클래스는 다음과 같습니다. ArrayList, LinkedList, Vector

세트:

Sets do ~ 아니다 중복 객체를 허용합니다. 대부분의 구현은 변하지 않지만 구현에 따라 다릅니다.

구현 클래스는 다음과 같습니다. HashSet (정렬되지 않은), LinkedHashSet (주문), TreeSet (자연 순서 또는 제공 비교기에 의해 주문)

우리가 Java 인터페이스에 대해 이야기 할 때, Javadoc을 보지 않겠습니까?!

  • List 정렬 된 컬렉션 (시퀀스)으로 일반적으로 복제를 허용합니다.
  • Set a는 중복 요소가없는 컬렉션입니다. 구현에 의해 반복 순서가 보장 될 수 있습니다.

세트에 관한 질서 부족에 대한 언급은 없습니다. 이는 구현에 따라 다릅니다.

이것은 당신이 찾고있는 답이 아닐 수도 있지만, 컬렉션 수업의 Javadoc은 실제로 꽤 설명 적입니다. 복사/붙여 넣기 :

순서 컬렉션 (시퀀스라고도 함). 이 인터페이스의 사용자는 각 요소가 삽입되는 위치를 정확하게 제어합니다. 사용자는 정수 지수 (목록의 위치)로 요소에 액세스하고 목록의 요소를 검색 할 수 있습니다.

세트와 달리 목록은 일반적으로 중복 요소를 허용합니다. 보다 공식적으로, 목록은 일반적으로 e1.equals (e2)를 위해 E1과 E2 쌍의 쌍을 허용하며, 일반적으로 널 요소가 전혀 허용되면 여러 널 요소를 허용합니다. 사용자가 삽입을 시도 할 때 런타임 예외를 던져서 복제를 금지하는 목록을 구현하기를 원할 수도 있지만,이 사용법은 드물다는 것은 상상할 수없는 일이 아닙니다.

세트는 정렬되지 않은 별개의 개체 그룹입니다. 중복 객체는 허용되지 않습니다. 일반적으로 삽입되는 객체의 해시 코드를 사용하여 구현됩니다. (특정 구현으로 인해 주문이 추가 될 수 있지만 설정 인터페이스 자체는 그렇지 않습니다.)

목록은 중복을 포함 할 수있는 순서 대상 객체 그룹입니다. An과 함께 구현할 수 있습니다 ArrayList, LinkedList, 등.

1.리스트는 중복 값을 허용하고 세트는 복제를 허용하지 않습니다

2. 목록은 목록 세트에 요소를 삽입 한 순서를 유지합니다. 3. 목록은 정렬 된 요소 시퀀스 인 반면, 세트는 정렬되지 않은 뚜렷한 요소 목록입니다.

목록 대 세트

1) 세트는 복제를 허용하지 않습니다. 목록은 복제를 허용합니다. SET의 구현을 기반으로 삽입 순서도 유지합니다.

예 : LinkedHashSet. 삽입 순서를 유지합니다. 참조하십시오 여기를 클릭하십시오

2) 포함 방법. 세트의 본질적으로 그것은 더 나은 성능을 제공 할 것입니다. 가장 좋은 경우 O (1). 그러나 목록에는 호출 할 성능 문제가 있습니다 contains.

목록:
목록은 중복 요소와 널 값을 허용합니다. 요소의 해당 색인을 사용하여 쉽게 검색 할 수 있으며 삽입 순서로 요소를 표시합니다. 예 : (LinkedList)

import java.util.*;

public class ListExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    List<Integer> l=new LinkedList<Integer>();
    l.add(001);
    l.add(555);
    l.add(333);
    l.add(888);
    l.add(555);
    l.add(null);
    l.add(null);

    Iterator<Integer> il=l.iterator();

    System.out.println(l.get(0));

    while(il.hasNext()){
        System.out.println(il.next());
    }

    for(Integer str : l){
        System.out.println("Value:"+str);
    }
 }

}

산출:

1
1
555
333
888
555
없는
없는
가치 : 1
가치 : 555
가치 : 333
가치 : 888
가치 : 555
가치 : null
가치 : null

세트:
세트는 중복 요소를 허용하지 않으며 단일 널 값을 허용합니다. 요소를 표시하기위한 순서가 유지되지 않습니다. TreeSet 오름차순 순서로 표시됩니다.

예 : (Treeset)

import java.util.TreeSet;

public class SetExample {

 public static void main(String[] args) {
    // TODO Auto-generated method stub

    TreeSet<String> set = new TreeSet<String>();
    try {
        set.add("hello");
        set.add("world");
        set.add("welcome");
        set.add("all");

        for (String num : set) {
            System.out.println( num);

        }
        set.add(null);
    } catch (NullPointerException e) {
        System.out.println(e);
        System.out.println("Set doesn't allow null value and duplicate value");
    }

 }

}

산출:

모두
안녕하세요
환영하다
세계
java.lang.nullpointerexception
세트는 널 값과 중복 값을 허용하지 않습니다

모든 List 클래스는 삽입 순서를 유지합니다. 성능 및 기타 특성을 기반으로 다른 구현을 사용합니다 (예 : ArrayList 특정 지수의 액세스 속도를 위해 LinkedList 단순히 순서를 유지하기 위해). 키가 없으므로 중복이 허용됩니다.

그만큼 Set 클래스는 삽입 순서를 유지하지 않습니다. 그들은 선택적으로 특정 순서를 부과 할 수 있습니다 ( SortedSet), 그러나 일반적으로 일부 해시 함수를 기반으로 구현 정의 순서가 있습니다 ( HashSet). 부터 Sets는 키에 의해 액세스되며, 복제물은 허용되지 않습니다.

주문 ... 목록에는 주문이 있으며 세트는 그렇지 않습니다.

Java에서 목록과 세트 사이의 가치있는 차이는 다음과 같이 제공됩니다.

1) Java에서 목록과 설정의 근본적인 차이는 중복 요소를 허용하는 것입니다. Java의 목록은 복제를 허용하고 세트는 복제를 허용하지 않습니다. 세트에 복제본을 삽입하면 이전 값을 대체합니다. Java에서 세트의 구현에는 고유 한 요소 만 포함됩니다.

2) Java에서 목록과 설정의 또 다른 중요한 차이점은 주문입니다. 목록은 정렬 된 컬렉션이며 세트는 변하지 않은 컬렉션입니다. 목록은 요소의 삽입 순서를 유지하며, 이전에 삽입 된 모든 요소는 다음에 삽입 된 요소보다 인덱스가 낮아집니다. Java로 설정하면 주문을 유지하지 않습니다. 세트는 SETTEDSET라는 다른 대안을 제공하지만 세트 요소는 세트에 저장된 객체의 비슷한 및 비교기 메소드에 의해 정의 된 특정 분류 순서에 세트 요소를 저장할 수 있습니다.

3) Java에서 List Interface의 인기있는 구현에는 Arraylist, Vector 및 LinkedList가 포함됩니다. 세트 인터페이스의 인기있는 구현에는 해시, 트리 세트 및 링크드 하시셋이 포함됩니다.

삽입 순서 또는 객체를 유지 해야하는 경우 컬렉션이 목록보다 복제물을 포함 할 수 있다는 것이 분명합니다. 반면에 귀하의 요구 사항이 세트보다 중복없이 고유 한 컬렉션을 유지 해야하는 경우 설정 방법입니다.

목록:

  1. 허용 복제.
  2. 그룹화 요소로 순서.

세트:

  1. 복제가 허용되지 않습니다.
  2. 분류되지 않은 그룹 요소.

Set<E> 그리고 List<E> 둘 다 유형의 요소를 저장하는 데 사용됩니다 E. 차이점은 그 것입니다 Set 정렬되지 않은 방식으로 저장되며 중복 값을 허용하지 않습니다. List 요소를 순서대로 저장하는 데 사용되며 중복 값을 허용합니다.

Set 인덱스 위치에 따라 요소에 액세스 할 수 없으며 List 인덱스 위치로 요소에 액세스 할 수 있습니다.

안녕하세요, 많은 답변이 이미 주어졌습니다. 지금까지 언급되지 않은 몇 가지 요점을 지적 할 것입니다.

  • 대부분의 목록 구현 (ArrayList, Vector) 구현하다 RandomAccess 더 빠른 액세스를위한 마커 인터페이스 인 인터페이스. 세트 구현 중 어느 것도 그렇게하지 않습니다.
  • 목록은 하나의 특수 반복자 호출을 사용합니다 ListIterator 양방향으로 반복을 지원합니다. 세트는 단지 반복을 지원하는 반복을 사용합니다
  • 해시 세트가 가져옵니다 5.5 배 더 메모리 동일한 수의 요소를 저장하기위한 ArrayList보다.

여기에 그루비가있는 명확한 예입니다. 세트와 목록을 만듭니다. 그런 다음 각 목록에 무작위로 생성 된 20 개의 값을 저장하려고합니다. 생성 된 값은 0 ~ 5 범위 일 수 있습니다.

s = [] as Set
l = []

max = 5
print "random Numbers :"
20.times{
e = (int)Math.random()*max
s << e
l << e
print "$e, "
}


println "\n"
println "Set : $s "
println "list : $l

결과 :

랜덤 숫자 : 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3

세트 : [4, 1, 0, 2, 3]

목록 : [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]

차이점은 다음과 같습니다.

  • 세트는 중복 값을 허용하지 않습니다.
  • 목록은 중복 값을 허용합니다.

세트로서 대답처럼 중복 값과 목록 캔이 없습니다. 물론, 주문은 그것들을 다른 것의 또 다른 것입니다.

세트:세트는 컬렉션에 중복 요소를 가질 수 없습니다. 또한 변하지 않은 컬렉션입니다. SET의 데이터에 액세스하려면 반복기 만 사용해야하며 인덱스 기반 검색은 불가능합니다. 주로 고유성 컬렉션이 필요할 때마다 사용됩니다.

목록:목록에는 자연 순서가 삽입 된 상태에서 중복 요소를 가질 수 있습니다. 따라서 인덱스 또는 반복자를 기반으로 데이터를 검색 할 수 있습니다. 인덱스를 기반으로 액세스 해야하는 컬렉션을 저장하는 데 널리 사용됩니다.

주제 이름:목록 VS 집합

나는 방금 Collections Framework라는 Java의 가장 중요한 주제를 살펴보았습니다.컬렉션에 대한 나의 작은 지식을 여러분과 공유하려고 생각했습니다.List, Set, Map이 가장 중요한 주제입니다.이제 List와 Set부터 시작해 보겠습니다.

목록과 집합의 차이점:

  1. List는 확장된 컬렉션 클래스입니다. AbstractList 여기서 Set은 확장되는 컬렉션 클래스입니다. AbstractSet 클래스이지만 둘 다 Collection 인터페이스를 구현합니다.

  2. List 인터페이스는 중복된 값(요소)을 허용하는 반면 Set 인터페이스는 중복된 값을 허용하지 않습니다.Set에 중복된 요소가 있는 경우 이전 값을 대체합니다.

  3. List 인터페이스는 NULL 값을 허용하지만 Set 인터페이스는 Null 값을 허용하지 않습니다.Set에서 Null 값을 사용하는 경우 NullPointerException.

  4. 목록 인터페이스는 삽입 순서를 유지합니다.이는 반복자 또는 for-each 스타일을 사용하여 요소를 얻는 것과 동일한 방식으로 목록에 요소를 추가하는 방식을 의미합니다.반면 Set 구현은 반드시 삽입 순서를 유지하지 않습니다.(하지만 SortedSet 사용하고 있습니다 TreeSet, 그리고 LinkedHashSet 삽입 순서를 유지합니다).

  5. List 인터페이스에는 자체 메소드가 정의되어 있는 반면 Set 인터페이스에는 자체 메소드가 없으므로 Set은 Collection 인터페이스 메소드만 사용합니다.

  6. 목록 인터페이스에는 다음과 같은 레거시 클래스가 하나 있습니다. Vector Set 인터페이스에는 레거시 클래스가 없습니다.

  7. 마지막이지만 적어도...그만큼 listIterator() 메서드는 List 클래스 내의 요소를 순환하는 데만 사용할 수 있는 반면, iterator() 메서드를 사용하여 Set 클래스 요소에 액세스할 수 있습니다.

다른 것을 추가할 수 있나요?알려주세요.

감사해요.

세트:

중복 값 순서는 구현에 따라 다를 수 없습니다. 기본적으로 주문되지 않음 인덱스별로 액세스 할 수 없습니다.

목록:

기본적으로 주문한 중복 값을 가질 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top