Set 집합 하위 클래스 HashSet, TreeSet
Set: , 。
Set Collection 。 。 。
|-HashSet: , 。
HashSet ?
hashCode equals 。
hashCode , equals true
hashCode , equals 。
HashSet contains remove hashCode , , equals 。
|-TreeSet: Set 。 。
: 0.
: 。( )
: , 。 , Comparable , 。
Comparable int CompareTo() , ,
:
0,
: , 。
。 java.lang.Comparable , compareTo 。
, , , 。
, , 。 。
?
: 。
。
java.util.Comparator , compare 。 Comparator
TreeSet 。
HashSet 의 예 를 살 펴 보 겠 습 니 다.
public class HashSetOverView {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add(new Person("abc0",20));
hs.add(new Person("abc6",26));
hs.add(new Person("abc1",21));
hs.add(new Person("abc6",26));
Iterator it = hs.iterator();
while(it.hasNext())
{
Person p = (Person)it.next();
System.out.println(p.getName()+"--"+p.getAge());
}
// System.out.println(hs.contains(new Person("abc6",26))); equals , 。
}
}
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public int hashCode()
{
System.out.println(this.name+"...hashCode");
final int NUMBER = 49;
return name.hashCode()+age*NUMBER;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
throw new ClassCastException(" ");
Person p = (Person)obj;
System.out.println(this.name+" equals run "+p.name);
return this.name.equals(p.name) && this.age==p.age;
}
public String toString()
{
return name+"::"+age;
}
}
HashSetOverView 클래스 의 main 방법 실행 결 과 는 다음 과 같 습 니 다.
abc0...hashCode
abc6...hashCode
abc1...hashCode
abc6...hashCode
abc6 equals run abc6
abc0--20
abc1--21
abc6--26
트 리 셋 집합 의 예 가 요소 의 질서 와 유일 성 을 어떻게 유지 하 는 지 살 펴 보 겠 습 니 다.
package cn.java.collection.set;
import java.util.TreeSet;
/*TreeSet , 。 compareble , compareTo */
// ,
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet ts = new TreeSet();
ts.add(new Student1("lisi0:",30));
ts.add(new Student1("lisixx:",29));
ts.add(new Student1("lisi9:",29));
ts.add(new Student1("lisi8:",38));
ts.add(new Student1("lisixx:",29));
ts.add(new Student1("lisi4:",14));
ts.add(new Student1("lisi7:",27));
System.out.println(ts);
}
}
//
class Student1 implements Comparable{
private String name;
private int age;
Student1(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;
}
public int compareTo(Object o) {
Student1 stu=(Student1)o;
int num=new Integer(this.age).compareTo(new Integer(stu.age));
return num==0?this.name.compareTo(stu.name):num;
/*Student stu=(Student)o;
if(this.age>stu.age)
return 1;
if(this.age==stu.age)
return 0;
return 1;*/
}
public String toString() {
return name+this.age;
}
}
위의 TreeSetDemo 의 main 방법 이 실 행 된 결 과 는 다음 과 같 습 니 다.
[lisi4:14, lisi7:27, lisi9:29, lisixx:29, lisi0:30, lisi8:38]
이러한 종류의 compare To 방법 은 정렬 의 관건 을 결정 할 수 있 을 뿐만 아니 라 유일 성 을 확보 하 는 관건 이기 도 하 다.
TreeSet 정렬 의 두 번 째 방법:
package cn.java.collection.set;
import java.util.Comparator;
import java.util.TreeSet;
/*
TreeSet: Set 。
: 0.
: 。
:
。 java.lang.Comparable , compareTo 。
, , , 。
, , 。 。
?
: 。
。
java.util.Comparator , compare 。 Comparator
TreeSet 。
。
*/
public class TreeSetDemo3 {
public static void main(String[] args) {
TreeSet ts = new TreeSet(new StudentComparatorByName());
ts.add(new Student1("lisi0:",30));
ts.add(new Student1("lisixx:",29));
ts.add(new Student1("lisi9:",29));
ts.add(new Student1("lisi8:",38));
ts.add(new Student1("lisixx:",29));
ts.add(new Student1("lisi4:",14));
//ts.add(new Student(39));
ts.add(new Student1("lisi7:",27));
System.out.println(ts);
}
}
/*
* , comparator
*/
class StudentComparatorByName implements Comparator{
@Override
public int compare(Student1 s1, Student1 s2) {
Student1 stu=(Student1)s1;
Student1 stu2=(Student1)s2;
int num=stu.getName().compareTo(stu2.getName());
return num==0?new Integer(stu.getAge()).compareTo(new Integer(stu2.getAge())):num;
}
}
//
class Student1 implements Comparable{
private String name;
private int age;
Student1(String name,int age){
this.name=name;
this.age=age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Object o) {
Student1 stu=(Student1)o;
if(this.age>stu.age)
return 1;
if(this.age==stu.age)
return 0;
return 1;
}
@Override
public String toString() {
return this.getName()+this.age;
}
}
TreeSet 정렬 의 두 번 째 방법 은 다음 과 같 습 니 다.
[lisi0:30, lisi4:14, lisi7:27, lisi8:38, lisi9:29, lisixx:29]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
범용 용법 예시앞으로 51CTO 에 정착 해 기술 개발 에 전념 할 테 니 잘 부탁드립니다.다음 코드 는 자신 이 (저자: 이 흥 화) 를 공부 할 때 두 드 린 코드 로 주석 이 완비 되 어 있다. 범용 클래스 Point. ja...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.