TreeMap集合特色、排序原理

TreeMap特色(相似於TreeSet):

1.無序,不容許重複(無序指元素順序與添加順序不一致)
2.TreeMap集合默認會對鍵進行排序,因此鍵必須實現天然排序和定製排序中的一種
3..底層使用的數據結構是二叉樹java

兩種排序的用法(參照TreeSet集合):

1.TreeSet集合排序方式一:天然排序Comparable
http://blog.csdn.net/baidu_37107022/article/details/70207564
2.TreeSet集合排序方式二:定製排序Comparator
http://blog.csdn.net/baidu_37107022/article/details/70207633markdown

練習:

1,建立公司Company類,擁有屬性:no(公司編號)、name(公司名稱)、num(公司人數)、founder(創始人)、info(公司簡介),要求屬性進行封裝即:屬性私有並提供公有方法。網絡

(a)請根據下列信息建立5個公司對象,各屬性值來自下面的信息數據結構

」1001,百度,2000,李彥宏,全球最大的中文搜索引擎、致力於讓網民更便捷地獲取信息,找到所求。」ide

「1010,騰訊,10000,馬化騰,深圳市騰訊計算機系統有限公司成立於1998年11月,由馬化騰、張志東、許晨曄、陳一丹、曾李青五位創始人共同創立。」測試

「1020,阿里巴巴,20000,馬雲,阿里巴巴網絡技術有限公司(簡稱:阿里巴巴集團)」ui

「1050,京東,8000,劉強東,京東(JD.com)是中國最大的自營式電商企業,2015年第一季度在中國自營式B2C電商市場的佔有率爲56.3%。」this

「1030,小米,5000,雷軍,小米公司成立於2010年4月,是一家專一於智能產品自主研發的移動互聯網公司。」搜索引擎

(b)請將上述的5個對象添加到TreeMapspa

package TreeMap;

import java.text.CollationKey;
import java.text.Collator;

/** * 建立公司Company類,擁有屬性:no(公司編號)、 * name(公司名稱)、num(公司人數)、founder(創始人)、 * info(公司簡介),要求屬性進行封裝即:屬性私有並提供公有方法。 * @author Administrator * */
public class Company implements Comparable<Company>{
    private int no;
    private String name;
    private int num;
    private String founder;
    private String info;
    public int getNo() {
        return no;
    }
    public void setNo(int no) {
        this.no = no;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public String getFounder() {
        return founder;
    }
    public void setFounder(String founder) {
        this.founder = founder;
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
    @Override
    public String toString() {
        return "Company [no=" + no + ", name=" + name + ", num=" + num + ", founder=" + founder + ", info=" + info
                + "]";
    }
    public Company(int no, String name, int num, String founder, String info) {
        super();
        this.no = no;
        this.name = name;
        this.num = num;
        this.founder = founder;
        this.info = info;
    }
    public Company() {
        super();
    }
    //要求按照如下規則依次排序:公司編號、公司名稱、創始人、公司人數,按升序排列
    @Override
    public int compareTo(Company o) {
        //公司編號
        int a=this.no-o.no;
        if(a!=0){
            return a;
        }else{
            //公司名稱
            CollationKey key=Collator.getInstance().getCollationKey(this.name);
            CollationKey key2=Collator.getInstance().getCollationKey(o.name);
            int b=key.compareTo(key2);
            if(b!=0){
                return b;
            }else{
                //創始人
                CollationKey key3=Collator.getInstance().getCollationKey(this.founder);
                CollationKey key4=Collator.getInstance().getCollationKey(o.founder);
                int c=key3.compareTo(key4);
                if(c!=0){
                    return c;
                }else {
                    //公司人數
                    return this.num-o.num;
                }
            }
        }
    }

}

測試代碼:

package TreeMap;

import java.util.Set;
import java.util.TreeMap;


public class Test {
    public static void main(String[] args) {
        TreeMap<Company, String> map=new TreeMap<>();
        map.put(new Company(1001, "百度", 2000, "李彥宏", "全球最大的中文搜索引擎、致力於讓網民更便捷地獲取信息,找到所求"), 
                "有錢的公司,任性!!");
        map.put(new Company(1010, "騰訊", 10000, "馬化騰", "深圳市騰訊計算機系統有限公司成立於1998年11月,由馬化騰、張志東、許晨曄、陳一丹、曾李青五位創始人共同創立"), 
                "有錢的公司,任性!!");
        map.put(new Company(1020, "阿里巴巴", 20000, "馬雲", "阿里巴巴網絡技術有限公司(簡稱:阿里巴巴集團)"),
                "有錢的公司,任性!!");
        map.put(new Company(1050, "京東", 8000, "劉強東", "京東(JD.com)是中國最大的自營式電商企業,2015年第一季度在中國自營式B2C電商市場的佔有率爲56.3%"),
                "有錢的公司,任性!!");
        map.put(new Company(1030, "小米", 5000, "雷軍", "小米公司成立於2010年4月,是一家專一於智能產品自主研發的移動互聯網公司"), 
                "有錢的公司,任性!!");

        Set<Company> set=map.keySet();
        for (Company company : set) {
            System.out.println(company+","+map.get(company));
        }
    }
}
相關文章
相關標籤/搜索