이 글은 집합 컬렉션과 관련된 문제를 주로 소개하는 java에 대한 관련 지식을 제공합니다. 집합 컬렉션의 특징은 순서가 없고, 반복되지 않으며, 색인이 없음을 함께 살펴보겠습니다. 모두가 도움이 됩니다.
추천 학습: "java 비디오 튜토리얼"
세트 컬렉션 기능:
Set 컬렉션 구현 클래스 기능:
HashSet: 순서 없음, 비반복, 색인 없음
LinkedHashSet: Ordered, non-duplicate, no index
TreeSet: Sort, non-duplicate, no index
Set 컬렉션의 기능은 기본적으로 Collection의 API와 동일합니다.
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 비교에 따라):
재정의된 메서드에서 반환 후의 코드는 개체가 어떤 기준에 따라 비교될지 결정합니다. 비교 규칙은 다음과 같습니다.
첫 번째 요소를 다음과 같이 간주합니다. 두 번째 요소보다 큼 그냥 양의 정수를 반환하세요
첫 번째 요소가 두 번째 요소보다 작다고 생각되면 그냥 음의 정수를 반환하세요
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!