> Java > java지도 시간 > 본문

Java에서 집합 컬렉션을 이해하는 방법

WBOY
풀어 주다: 2022-06-20 11:31:05
앞으로
1843명이 탐색했습니다.

이 글은 집합 컬렉션과 관련된 문제를 주로 소개하는 java에 대한 관련 지식을 제공합니다. 집합 컬렉션의 특징은 순서가 없고, 반복되지 않으며, 색인이 없음을 함께 살펴보겠습니다. 모두가 도움이 됩니다.

Java에서 집합 컬렉션을 이해하는 방법

추천 학습: "java 비디오 튜토리얼"

세트 컬렉션 기능:

  • 순서 없음: 액세스 순서가 일치하지 않습니다.
  • 중복 없음: 중복 제거 가능
  • 색인 없음: 있음 는 색인화 방법이 아니므로 일반적인 for 루프 순회를 사용할 수 없으며 색인을 통해 요소를 얻을 수도 없습니다

Set 컬렉션 구현 클래스 기능:

HashSet: 순서 없음, 비반복, 색인 없음

LinkedHashSet: Ordered, non-duplicate, no index

TreeSet: Sort, non-duplicate, no index

Set 컬렉션의 기능은 기본적으로 Collection의 API와 동일합니다.

HashSet 컬렉션

HashSet 컬렉션:

Set<String> set = new HashSet<>();
        set.add("石原里美");
        set.add("石原里美");
        set.add("工藤静香");
        set.add("朱茵");
        System.out.println(set);
        set.remove("朱茵");
        System.out.println(set);
로그인 후 복사

출력 결과:

위의 코드와 실행 결과를 통해 HashSet 컬렉션이 순서가 없고 반복되지 않는다는 것을 분명히 알 수 있습니다. 위 그림을 종합해보면 HashSet 컬렉션은 get() 메소드의 인덱스를 통해서는 데이터를 얻을 수 없고, 컬렉션에 있는 데이터를 삭제하는 경우에는 방향 삭제를 통해서만 데이터를 삭제할 수 있음을 알 수 있다.

LinkedHashSet 집합:

LinkedHashSet 집합:

Set<String> set = new LinkedHashSet<>();
        set.add("石原里美");
        set.add("石原里美");
        set.add("工藤静香");
        set.add("朱茵");
        System.out.println(set);
        set.remove("朱茵");
        System.out.println(set);
로그인 후 복사

출력 결과:

위 코드를 출력 결과와 비교하면 무질서와 질서의 차이를 알 수 있습니다. 들어오는 데이터는 중단되지만 후자는 여전히 입력 데이터 순서대로 데이터를 저장하므로 출력은 정렬된 상태입니다.

TreeSet 컬렉션:

TreeSet 컬렉션:

Set<Integer> set = new TreeSet<>();
        set.add(13);
        set.add(23);
        set.add(23);
        set.add(11);
        System.out.println(set);
        set.remove(23);
        System.out.println(set);
로그인 후 복사

출력 결과:

위의 코드와 출력 결과를 통해 TreeSet의 특징이 정렬인 이유와 저장되는 데이터가 정렬에 따라 저장되는 이유를 문자 그대로 이해할 수 있습니다. Java의 기본 정렬 방법을 기준으로 정렬합니다.

단, 이때 People 객체 등의 Custom 객체를 저장하면 TreeSet을 직접 정렬할 수 없어 오류가 발생하게 됩니다!

//People类:
public class People{
    private String name;
    private int age;
    private String classroom;

    public People(){

    }
    public People(String name, int age, String classroom) {
        this.name = name;
        this.age = age;
        this.classroom = classroom;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getClassroom() {
        return classroom;
    }

    public void setClassroom(String classroom) {
        this.classroom = classroom;
    }

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", classroom='" + classroom + '\'' +
                '}';
    }
}
//main方法:
public static void main(String[] args) {
        Set<People> p = new TreeSet<>();
        p.add(new People("张三",19,"智能"));
        p.add(new People("李四",18,"数据库"));
        p.add(new People("王五",20,"渗透"));
        System.out.println(p);
    }
로그인 후 복사
이 문제를 해결하려면 TreeSet 컬렉션의 저장 유형을 사용자 정의해야 합니다. 이 문제를 해결하는 방법에는 두 가지가 있습니다.

One

은 클래스를 사용자 정의하여 Comparable 인터페이스를 구현하고 CompareTo 메서드를 재정의하는 것입니다. 규칙을 지정하기 위해 ;

The other

는 규칙 정의를 위한 자체 비교기 개체가 있는 컬렉션입니다.

방법 1: Custom 클래스는 Comparable 인터페이스를 구현하고 CompareTo 메서드를 다시 작성하여 비교 규칙을 지정합니다(여기서는 중복되고 관련 없는 코드는 설명하지 않고 코드의 중요한 부분만 표시합니다)

//改变的第一个地方:实现Comparable类
public class People implements Comparable<People> {
//改变的第二个地方:重写Comparable类中的compareTo方法    
    @Override
    public int compareTo(People o) {
        return this.age-o.age;
    }
}
로그인 후 복사
출력 결과 (Age 비교에 따라):

재정의된 메서드에서 반환 후의 코드는 개체가 어떤 기준에 따라 비교될지 결정합니다. 비교 규칙은 다음과 같습니다.

첫 번째 요소를 다음과 같이 간주합니다. 두 번째 요소보다 큼 그냥 양의 정수를 반환하세요

첫 번째 요소가 두 번째 요소보다 작다고 생각되면 그냥 음의 정수를 반환하세요

    첫 번째 요소가 두 번째 요소와 같다고 생각되면 0을 반환하세요. 이번에는 Treeset 컬렉션이 하나의 요소만 유지하므로 두 요소가 중복된 것으로 간주됩니다
  • 방법 2:
  • 세트에는 규칙 정의를 위한 자체 비교 개체가 제공됩니다
Set<People> p = new TreeSet<>(new Comparator<People>() {
            @Override
            public int compare(People o1, People o2) {
                return o1.getAge()-o2.getAge();
            }
        });
로그인 후 복사
생성을 변경했습니다. 원본을 기준으로 설정하고 비교 기준은 이전 정의 방법과 유사하지만 상대적으로 이전 방법보다 이 방법이 더 편리하고 빠릅니다. 여기에서는 이전에 배운 지식 "람다 표현식" 중 일부를 검토하고 코드 블록을 단순화할 수도 있습니다.

Set<People> p = new TreeSet<>((o1, o2) -> o1.getAge()-o2.getAge());
로그인 후 복사
람다 표현식을 공부하지 않았거나 람다 표현식에 대한 지식이 명확하지 않은 경우 Java에서 람다 표현식을 이해하는 방법을 읽어보세요. 이 문서의 간단한 설명이 도움이 될 수 있습니다.

추천 학습: "java 비디오 튜토리얼"

위 내용은 Java에서 집합 컬렉션을 이해하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿