黒馬プログラマー17-6:TreeSetのComparatorコンパレータインタフェースおよびcomparareTo最適化書き方
7118 ワード
-------
androidトレーニング 、
JAvaトレーニング、あなたと交流することを期待します!------
TreeSetは、カスタムまたはデフォルトの比較器でソートされる要素の一意の集合です.
TreeSetの使用
|--TreeSet:Setセット内の要素をソートできます.非同期です.
要素の一意性を判断する方法:比較方法の戻り結果が0であるかどうか、0であるかどうか、同じ要素であり、保存されない.
TreeSetが要素をソートする方法1:
要素自体に比較機能を持たせるには,メタがComparableインタフェースを実現する必要がある.compareToメソッドを上書きします.
オブジェクトに含まれる自然な順序で並べ替えない場合.オブジェクトに自然な順序がない場合.どうしよう?
TreeSetコレクションの2番目のソート方法2を使用できます.
コレクション自体に比較機能を持たせ,クラス実装Comparatorインタフェースを定義し,comparareメソッドを上書きする.クラスオブジェクトをパラメータとしてTreeSetコレクションのコンストラクション関数に渡します.
-------
androidトレーニング 、
JAvaトレーニング、あなたと交流することを期待します!------
詳細は以下を参照してください.
http://edu.csdn.net/heima -------
androidトレーニング 、
JAvaトレーニング、あなたと交流することを期待します!------
package cn.itcast.p.bean;
import java.util.ArrayList;
import java.util.Iterator;
public class Person /*extends Object*/ implements Comparable {
public static void main(String []augs){
// Person p = new Person("p1",3);
ArrayList al = new ArrayList();
al.add(new Person("p1",3));
al.add(new Person("p2",2));
al.add(new Person("p3",3));
al.add(new Person("p4",4));
al.add(new Person("p5",5));
Iterator it = al.iterator();
while(it.hasNext()){
Person p = (Person) it.next();
System.out.println(p.getName() + " " + p.getAge());
}
}
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
// System.out.println(this+".......hashCode");
return name.hashCode()+age*37;
// return 100;
}
@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
//
if(!(obj instanceof Person))
throw new ClassCastException(" ");
// System.out.println(this+"....equals....."+obj);
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.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 String toString(){
return name+":"+age;
}
// TreeSet ,
@Override
public int compareTo(Object o) {
//
if(!(o instanceof Person)){
throw new ClassCastException(" ");
}
Person p = (Person)o;
int temp = this.age-p.age;
return temp==0?this.name.compareTo(p.name):temp;
// int temp = this.name.compareTo(p.name);
// return temp==0?this.age-p.age:temp;
/*
if(this.age>p.age)
return 1;
if(this.age<p.age)
return -1;
else{
return this.name.compareTo(p.name);
}
*/
}
}
package cn.itcast.p5.treeset.demo;
import java.util.Iterator;
import java.util.TreeSet;
import cn.itcast.p.bean.Person;
import cn.itcast.p5.comparator.ComparatorByName;
public class TreeSetDemo {
/**
* @param args
*/
public static void main(String[] args) {
TreeSet ts = new TreeSet(new ComparatorByName());
/*
* ��Person����������д�С���������
*
*/
ts.add(new Person("zhangsan",28));
ts.add(new Person("lisi",21));
ts.add(new Person("zhouqi",29));
ts.add(new Person("zhaoliu",25));
ts.add(new Person("wangu",24));
Iterator it = ts.iterator();
while(it.hasNext()){
Person p = (Person)it.next();
System.out.println(p.getName()+":"+p.getAge());
}
}
/**
*
*/
public static void demo1() {
TreeSet ts = new TreeSet();
ts.add("abc");
ts.add("zaa");
ts.add("aa");
ts.add("nba");
ts.add("cba");
Iterator it = ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
package cn.itcast.p5.comparator;
import java.util.Comparator;
import cn.itcast.p.bean.Person;
/**
* ������һ�����Person���name��������ıȽ�����
*/
public class ComparatorByName implements Comparator {
@Override
public int compare(Object o1, Object o2) {
Person p1 = (Person)o1;
Person p2 = (Person)o2;
// (compareTO, , )
int temp = p1.getName().compareTo(p2.getName());
// ,
return temp==0?p1.getAge()-p2.getAge(): temp;
// return 1;//����
}
}
package cn.itcast.p5.comparator;
import java.util.Comparator;
public class ComparatorByLength implements Comparator {
@Override
public int compare(Object o1, Object o2) {
String s1 = (String)o1;
String s2 = (String)o2;
// ( ) ,
int temp = s1.length()-s2.length();
System.out.println("s1: " + s1 + " " + "s2: "+ s2 + " ");
// , ,
return temp==0? s1.compareTo(s2): temp;
}
}
package cn.itcast.p5.treeset.test;
import java.util.Iterator;
import java.util.TreeSet;
import cn.itcast.p5.comparator.ComparatorByLength;
/*
* ���ַ���г�������
*
* "20 18 -1 89 2 67"
*/
public class TreeSetTest {
/**
* @param args
*/
public static void main(String[] args) {
TreeSet ts = new TreeSet(new ComparatorByLength());
ts.add("aaaaa");
ts.add("zz");
ts.add("nbaq");
ts.add("cba");
ts.add("abc");
Iterator it = ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
TreeSetは、カスタムまたはデフォルトの比較器でソートされる要素の一意の集合です.
TreeSetの使用
|--TreeSet:Setセット内の要素をソートできます.非同期です.
要素の一意性を判断する方法:比較方法の戻り結果が0であるかどうか、0であるかどうか、同じ要素であり、保存されない.
TreeSetが要素をソートする方法1:
要素自体に比較機能を持たせるには,メタがComparableインタフェースを実現する必要がある.compareToメソッドを上書きします.
オブジェクトに含まれる自然な順序で並べ替えない場合.オブジェクトに自然な順序がない場合.どうしよう?
TreeSetコレクションの2番目のソート方法2を使用できます.
コレクション自体に比較機能を持たせ,クラス実装Comparatorインタフェースを定義し,comparareメソッドを上書きする.クラスオブジェクトをパラメータとしてTreeSetコレクションのコンストラクション関数に渡します.
-------
androidトレーニング 、
JAvaトレーニング、あなたと交流することを期待します!------
詳細は以下を参照してください.
http://edu.csdn.net/heima -------