TreeSet 정렬, 사용자 정의 대상 저장, 사용자 정의 비교 기 예제
집합 이 초기 화 되 었 을 때 비교 방식 이 생 겼 다.
예시: 수요: TreeSet 집합 에 사용자 정의 대상 학생 을 저장 하고 학생 의 나이 에 따라 순 서 를 매 깁 니 다.
package tan;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet ts=new TreeSet();
ts.add(new Student("tan1", 21));
ts.add(new Student("tan3", 20));
ts.add(new Student("tan2", 23));
ts.add(new Student("tan5", 21));
Iterator it=ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
class Student implements Comparable{
private String name;
private Integer age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "name:"+this.name+" "+"age:"+this.age;
}
@Override
public int compareTo(Object obj) {
if(!(obj instanceof Student))throw new RuntimeException(" ");
Student s=(Student)obj;
if(this.age>s.age) return 1;
// , , 。
if(this.age==s.age)
{
return this.name.compareTo(s.name);
}
return -1;
}
}
사용자 정의 비교 기
package tan;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
//
TreeSet ts=new TreeSet(new StudentAgeComparator());
ts.add(new Student("tan01", 21));
ts.add(new Student("tan03", 20));
ts.add(new Student("tan03", 22));
ts.add(new Student("tan0012", 23));
ts.add(new Student("tan007", 21));
Iterator it=ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
class Student implements Comparable{
private String name;
private Integer age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "name:"+this.name+" "+"age:"+this.age;
}
@Override
public int compareTo(Object obj) {
if(!(obj instanceof Student))throw new RuntimeException(" ");
Student s=(Student)obj;
if(this.age>s.age) return 1;
// , , 。
if(this.age==s.age)
{
return this.name.compareTo(s.name);
}
return -1;
}
}
//
class StudentNameComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
Student s1=(Student)o1;
Student s2=(Student)o2;
int num=s1.getName().compareTo(s2.getName());
if(num==0){
// Ingteger comparable
return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
//
/*
if(s1.getAge()>s2.getAge())
return 1;
if(s1.getAge()==s2.getAge())
return 0;
return -1;
*/
}
return num;
}
}
//
class StudentAgeComparator implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
int i=o1.getAge()-o2.getAge();
return i;
}
}
연습: 문자열 길이 에 따라 정렬 합 니 다.
문자열 자체 가 비교 성 을 가지 고 있 지만 비교 방식 은 필요 하지 않 습 니 다. 이 때 는 비교 기 만 사용 할 수 있 습 니 다.
package tan;
import java.util.*;
public class TreeSetTest {
public static void main(String[] args) {
TreeSet ts = new TreeSet(new StrLengthComparator());
ts.add("abcd");
ts.add("cc");
ts.add("cba");
ts.add("aaa");
ts.add("z");
ts.add("hahaha");
Iterator it = ts.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
class StrLengthComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
String s1 = (String) o1;
String s2 = (String) o2;
int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
// ,
if(num==0){
return s1.compareTo(s2);
}
return num;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.