Java Set 컬렉션의 반복 및 구현 클래스 비교
Java의 Set 컬렉션은 중복된 요소를 포함하지 않는 Collection입니다. 우선 훑어보는 방법을 살펴보겠습니다.
package com.sort;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
* collection。 ,set e1.equals(e2) e1 e2,
* @author Owner
*
*/
public class SetTest2 {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");
set.add("d");
set.add("e");
set.add("e");//
/**
* ,
*/
for(Iterator<String> iterator = set.iterator();iterator.hasNext();){
System.out.print(iterator.next()+" ");
}
System.out.println();
System.out.println("********************");
/**
* for
*/
for(String value : set){
System.out.print(value+" ");
}
}
}
주의: 여기 Set 집합에 넣는 것은 String 형식입니다. 만약에 우리가 정의한 클래스 실례를 넣었을 때, 예를 들어Person 클래스 실례를 넣었을 때, 이때 우리는 스스로 Hashcode와 equal 방법을 다시 써야 합니다. 자신의 관건적인 필드로 다시 써야 합니다. 왜냐하면 HashSet을 사용할 때hashCode () 방법이 호출되어 집합에 저장된 대상의hashcode 값이 증가한 대상의hashcode 값과 일치하는지 판단하기 때문입니다.만약 일치하지 않으면 직접 넣는다.만약 일치한다면, 다시 equals 방법의 비교를 진행하고, equals 방법은true로 돌아가면, 대상이 이미 추가되었음을 표시하며, 더 이상 새로운 대상이 증가하지 않을 것이며, 그렇지 않으면 추가되지 않을 것이다.다음은 Set 집합의 또 다른 중요한 실현 클래스인 TreeSet을 분석합니다.
TreeSet은 원소의 자연 순서를 사용하여 원소를 정렬하거나 set을 만들 때 제공하는Comparator에 따라 정렬합니다. 구체적으로 사용하는 구조 방법에 따라 정렬됩니다.
통속적으로 말하면, 정렬 후의 목록에 따라 표시할 수도 있고, 지정된 규칙에 따라 정렬할 수도 있다
Set<String> set = new TreeSet<String>();
set.add("f");
set.add("a");
set.add("b");
set.add("c");
set.add("d");
set.add("e");
System.out.println(set);
출력: [a, b, c, d, e, f]정렬 후 출력
그럼 우리가 역순으로 내보내고 싶다면?물론 방법이 많다.여기서 나는 지정된 규칙을 채택하여 그가 역순으로 출력하도록 한다
package com.sort;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest3 {
public static void main(String[] args) {
Set<String> set = new TreeSet<String>(new MyComparator());
set.add("a");
set.add("b");
set.add("c");
set.add("d");
set.add("e");
set.add("A");
for(Iterator<String> iterator = set.iterator();iterator.hasNext();){
System.out.print(iterator.next()+" ");
}
}
}
class MyComparator implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);//
}
}
출력: e d c b a A만약에 Set 집합에 우리가 정의한 유형을 넣었다면?
주의: 정렬 규칙 클래스를 정의하여Comparator 인터페이스를 실현해야 합니다. 위의 방법과 유사합니다
package com.sort;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest2 {
public static void main(String[] args) {
Set<Person> set = new TreeSet<Person>(new PersonComparator());
Person p1 = new Person(10);
Person p2 = new Person(20);
Person p3 = new Person(30);
Person p4 = new Person(40);
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
for(Iterator<Person> iterator = set.iterator();iterator.hasNext();){
System.out.print(iterator.next().score+" ");
}
}
}
class Person{
int score;
public Person(int score){
this.score = score;
}
public String toString(){
return String.valueOf(this.score);
}
}
class PersonComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.score - o2.score;
}
}
출력: 10 20 30 40만약 한 사람의 점수의 역순으로 배열된다면,compare 방법의 o2만 변경하면 된다.score-o1.score
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.