Set과 List의 차이점은 무엇입니까?
Set<E>
와 List<E>
인터페이스 의 근본적인 차이점은 무엇입니까 ?
List
는 순서가 지정된 요소의 Set
순서이며 정렬되지 않은 요소의 고유 목록입니다 (감사합니다, Quinn Taylor ).
정렬 된 컬렉션 (시퀀스라고도 함). 이 인터페이스의 사용자는 목록에서 각 요소가 삽입되는 위치를 정확하게 제어 할 수 있습니다. 사용자는 정수 인덱스 (목록의 위치)로 요소에 액세스하고 목록에서 요소를 검색 할 수 있습니다.
중복 요소가없는 컬렉션입니다. 보다 공식적으로, 세트에는 e1.equals (e2)와 같은 한 쌍의 요소 e1과 e2가없고 최대 하나의 null 요소가 포함됩니다. 이름에서 알 수 있듯이이 인터페이스는 수학 집합 추상화를 모델링합니다.
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║ ║ List ║ Set ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Duplicates ║ YES ║ NO ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Order ║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║ YES ║ NO ║
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
순서가 지정된 요소 목록 (고유한지 여부)
이름이 지정된 Java 인터페이스를 준수합니다.List
색인으로 액세스 가능
사용하여 구현
- 연결 목록
- 배열 목록
고유 한 요소 목록 :
이름이 지정된 Java 인터페이스를 준수합니다Set
. 색인으로 액세스
할 수 없습니다
사용하여 구현
- 해시 세트 (순서 없음)
- LinkedHashSet (주문)
- TreeSet (자연 순서 또는 제공된 비교기로 정렬)
두 인터페이스 모두 Java라는 인터페이스 Set
를 List
준수합니다.Collection
세트는 목록이 할 수있는 동안 중복 요소를 포함 할 수 없습니다. 목록 (Java)도 순서를 의미합니다.
- 목록은 주문 된 항목 그룹입니다.
- 세트는 중복이 허용되지 않는 항목을 순서대로 그룹화 한 것입니다 (보통)
개념적으로 우리는 일반적으로 가방으로 복제를 허용하고 복제를 허용하지 않는 순서가없는 그룹화를 참조합니다.
명부
- 정렬 된 요소 그룹입니다.
- List는 중복 된 요소를 수집하는 데 사용됩니다.
- 새로운 메소드는 List 인터페이스 내에 정의됩니다.
세트
- 정렬되지 않은 요소 그룹입니다.
- 세트는 중복없이 요소를 수집하는 데 사용됩니다.
- Set 인터페이스에는 새로운 메소드가 정의되어 있지 않으므로 Set 서브 클래스에서만 Collection 인터페이스 메소드를 사용해야합니다.
명부:
List
일반적으로 중복 오브젝트를 허용합니다. List
주문해야하므로 색인으로 액세스 할 수 있습니다.
구현 클래스는 다음과 같습니다 : ArrayList
, LinkedList
,Vector
세트:
Set
중복 오브젝트를 허용 하지 않습니다 . 대부분의 구현은 순서가 맞지 않지만 구현에 따라 다릅니다.
구현 클래스에는 HashSet
(정렬되지 않음), LinkedHashSet
(순서대로), TreeSet
(자연 순서로 또는 제공된 비교기로 정렬)
Java 인터페이스에 대해 이야기하면서 Javadoc을 보지 않겠습니까?!
- A
List
는 정렬 된 컬렉션 (시퀀스)이며 일반적으로 복제본을 허용합니다 Set
A는 중복 요소가없는 콜렉션, 반복 순서는 구현에 의해 보장 될 수있다
세트에 관한 순서 부족에 대해서는 언급이 없습니다. 구현에 따라 다릅니다.
이것은 당신이 찾고있는 대답이 아닐 수도 있지만 컬렉션 클래스의 JavaDoc은 실제로 매우 설명 적입니다. 복사 / 붙여 넣기 :
정렬 된 컬렉션 (시퀀스라고도 함). 이 인터페이스의 사용자는 목록에서 각 요소가 삽입되는 위치를 정확하게 제어 할 수 있습니다. 사용자는 정수 인덱스 (목록의 위치)로 요소에 액세스하고 목록에서 요소를 검색 할 수 있습니다.
집합과 달리 목록은 일반적으로 중복 요소를 허용합니다. 보다 공식적으로,리스트는 일반적으로 e1.equals (e2)와 같이 요소 e1과 e2의 쌍을 허용하며, 널 요소를 전혀 허용하지 않으면 일반적으로 여러 널 요소를 허용합니다. 사용자가 삽입하려고 할 때 런타임 예외를 발생시켜 중복을 금지하는 목록을 구현하려는 사람은 상상할 수 없지만,이 사용법은 드물 것으로 예상됩니다.
세트는 정렬되지 않은 개별 객체 그룹으로, 중복 객체는 허용되지 않습니다. 일반적으로 삽입되는 객체의 해시 코드를 사용하여 구현됩니다. (구체적인 구현은 순서를 추가 할 수 있지만 Set 인터페이스 자체는 그렇지 않습니다.)
목록은 중복 된 개체를 포함 할 수있는 정렬 된 개체 그룹입니다. 그것은가 구현 될 수있다 ArrayList
, 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
Set :
Set은 중복 요소를 허용하지 않으며 단일 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");
}
}
}
산출:
모두
hello
welcome
world
java.lang.NullPointerException
Set은 null 값과 중복 값을 허용하지 않습니다.
1. 목록은 중복 값을 허용하고 설정은 중복을 허용하지 않습니다
2. List는 목록에 요소를 삽입 한 순서를 유지합니다. Set은 순서를 유지하지 않습니다. 3. List는 순서가 지정된 요소의 순서이며 Set은 순서가없는 요소의 고유 한 목록입니다.
목록 대 설정
1) 세트는 복제를 허용하지 않습니다. 목록은 중복을 허용합니다. Set 구현을 기반으로 삽입 순서를 유지 관리합니다.
예 : LinkedHashSet
. 게재 신청서를 유지합니다. 여기를 참조 하십시오
2) 방법이 포함되어 있습니다 . 세트의 특성상 액세스 성능이 향상됩니다. 가장 좋은 경우는 o (1)입니다. 그러나 List에는 성능 문제가 contains
있습니다.
모든 List
클래스는 삽입 순서를 유지합니다. 이들은 성능 및 기타 특성 (예 : ArrayList
특정 색인의 액세스 속도, LinkedList
단순히 순서 유지)에 따라 다른 구현을 사용 합니다. 키가 없으므로 중복이 허용됩니다.
Set
클래스 삽입 순서를 유지하지 않습니다. 선택적으로 특정 순서를 가할 수도 SortedSet
있지만 (와 같이 ) 일부 해시 함수를 기반으로 구현 정의 순서를가집니다 (와 HashSet
). Set
키로 s에 액세스 하므로 중복은 허용되지 않습니다.
주문 ... 목록에는 주문이 있지만 세트에는 없습니다.
Java에서 List와 Set의 가치있는 차이점은 다음과 같습니다.
1) Java에서 List와 Set의 근본적인 차이점은 중복 요소를 허용한다는 것입니다. Java의 목록은 중복을 허용하지만 설정은 중복을 허용하지 않습니다. Set에 중복을 삽입하면 이전 값이 대체됩니다. Java에서 Set의 모든 구현에는 고유 한 요소 만 포함됩니다.
2) Java에서 List와 Set의 또 다른 중요한 차이점은 순서입니다. List는 Ordered Collection이고 Set은 정렬되지 않은 Collection입니다. 목록은 요소의 삽입 순서를 유지합니다. 이전에 삽입 된 요소는 이후에 삽입 된 요소보다 낮은 색인으로 이동합니다. Java로 설정하면 순서가 유지되지 않습니다. Set은 SortedSet이라는 또 다른 대안을 제공하지만 Set에 저장된 객체의 Comparable 및 Comparator 메서드에 의해 정의 된 특정 정렬 순서로 Set 요소를 저장할 수 있습니다.
3) Java에서 List 인터페이스의 일반적인 구현에는 ArrayList, Vector 및 LinkedList가 포함됩니다. Set 인터페이스의 일반적인 구현에는 HashSet, TreeSet 및 LinkedHashSet이 포함됩니다.
삽입 순서 또는 객체를 유지 관리해야하고 컬렉션보다 중복이 포함될 수있는 경우 목록 방법이 좋습니다. 반면에 요구 사항이 Set보다 중복되지 않고 고유 한 컬렉션을 유지 해야하는 경우 Set이 갈 길입니다.
명부:
- 중복 허용.
- 그룹화 요소로 정렬 됨 (즉, 명확한 순서를 가짐. 오름차순으로 정렬 할 필요가 없음)
세트:
- 중복은 허용되지 않습니다.
- 그룹화 요소에서 순서가 없습니다. (즉, 명확한 순서가 없습니다. 오름차순으로 정렬되거나 정렬되지 않을 수 있습니다)
Set<E>
그리고 List<E>
둘 다 유형의 요소를 저장하는 데 사용됩니다 E
. 차이점은 Set
순서가없는 방식으로 저장되며 중복 값을 허용하지 않는다는 것입니다. List
요소를 순서대로 저장하는 데 사용되며 중복 값을 허용합니다.
Set
인덱스 위치로 List
요소에 액세스 할 수 없으며 인덱스 위치로 요소에 액세스 할 수 있습니다.
안녕하세요 너무 많은 답변이 이미 제공되어 있습니다 .. 지금까지 언급되지 않은 몇 가지 사항을 알려 드리겠습니다.
- 대부분의 List 구현 (ArrayList, Vector) 은 빠른 액세스를위한 마커 인터페이스 인 인터페이스를 구현
RandomAccess
합니다. Set 구현 중 어느 것도 그렇게하지 않습니다. - List는
ListIterator
양방향 반복을 지원 하는 하나의 특수한 Iterator를 사용 합니다 . Set은 단방향 반복 만 지원하는 Iterator를 사용합니다. - HashSet은 동일한 수의 요소를 저장하기 위해 ArrayList보다 5.5 배 더 많은 메모리 를 사용합니다.
여기 그루비에 대한 명확한 예가 없습니다. 세트와 목록을 만듭니다. 그런 다음 각 목록 내에 임의로 생성 된 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과 같은 대답은 중복 값이 없으며 List는 할 수 있습니다. 물론 질서가 다른 점이 있습니다.
집합 : 집합에는 컬렉션에 중복 요소가있을 수 없습니다. 또한 정렬되지 않은 컬렉션입니다. Set에서 데이터에 액세스하려면 Iterator 만 사용해야하며 인덱스 기반 검색은 불가능합니다. 고유성 수집이 필요할 때마다 주로 사용됩니다.
목록 : 목록은 삽입 된대로 자연 순서대로 중복 요소를 가질 수 있습니다. 따라서 인덱스 또는 반복자를 기반으로 데이터를 검색 할 수 있습니다. 인덱스를 기반으로 액세스해야하는 컬렉션을 저장하는 데 널리 사용됩니다.
주제 이름 : List VS Set
Collections Framework라는 Java의 가장 중요한 주제를 살펴 보았습니다. 컬렉션에 대한 나의 작은 지식을 당신과 공유하려고 생각했습니다. 목록, 설정,지도가 가장 중요한 주제입니다. 이제 List and Set부터 시작하겠습니다.
리스트와 세트의 차이점 :
List는 클래스를 확장하는 컬렉션 클래스이며,
AbstractList
여기서 Set은 클래스를 확장AbstractSet
하지만 Collection 인터페이스를 구현 하는 컬렉션 클래스입니다 .List 인터페이스는 중복 값 (요소)을 허용하지만 Set 인터페이스는 중복 값을 허용하지 않습니다. Set에 중복 요소가있는 경우 이전 값을 대체합니다.
List 인터페이스는 Set 인터페이스가 Null 값을 허용하지 않는 경우 NULL 값을 허용합니다. Set에서 Null 값을 사용하는 경우 제공합니다
NullPointerException
.목록 인터페이스는 삽입 순서를 유지합니다. 이는 반복자 또는 각 스타일을 사용하여 얻는 것과 같은 방식으로 List에 요소를 추가하는 방식을 의미합니다. 반면
Set
구현 반드시 삽입 순서를 유지하지 않습니다. (비록SortedSet
사용하여 수행TreeSet
하고,LinkedHashSet
신청서를 유지한다).List 인터페이스에는 자체 메서드가 정의되어 있지만 Set 인터페이스에는 자체 메서드가 없으므로 Set 인터페이스 인터페이스 메서드 만 사용합니다.
List 인터페이스에는 레거시 클래스가 하나
Vector
있지만 Set 인터페이스에는 레거시 클래스가 없습니다.마지막이지만 적어도 ...
listIterator()
메서드는 List 클래스 내의 요소를 순환하는 데만 사용할 수 있지만 iterator () 메서드를 사용하여 Set 클래스 요소에 액세스 할 수 있습니다
다른 것을 추가 할 수 있습니까? 알려주세요.
감사.
세트:
중복 값을 가질 수 없음 순서는 구현에 따라 다릅니다. 기본적으로 주문되지 않음 인덱스로 액세스 할 수 없습니다
명부:
중복 값을 가질 수 있음 기본적으로 주문 됨 색인별로 액세스 할 수 있음
참고 URL : https://stackoverflow.com/questions/1035008/what-is-the-difference-between-set-and-list
'Programming' 카테고리의 다른 글
Graphviz : .dot에서 그래프로 이동하는 방법? (0) | 2020.02.23 |
---|---|
Mac OS X에 Java 7을 설치했지만 터미널에서 여전히 버전 6을 사용하고 있습니다. (0) | 2020.02.23 |
sed에서 욕심 많은 (reluctant) 정규 표현식 일치? (0) | 2020.02.23 |
브라우저의 "F5"및 "Ctrl + F5"새로 고침은 어떤 요청을 생성합니까? (0) | 2020.02.23 |
Git에서 오래된 (마지막이 아닌) 커밋에 변경된 파일을 추가하는 방법 (0) | 2020.02.23 |