TreeMap集合特点、排序原理

TreeMap特点(类似于TreeSet):

1.无序,不允许重复(无序指元素顺序与添加顺序不一致)
2.TreeMap集合默认会对键进行排序,所以键必须实现自然排序和定制排序中的一种
3..底层使用的数据结构是二叉树

两种排序的用法(参照TreeSet集合):

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

练习:

1,创建公司Company类,拥有属性:no(公司编号)、name(公司名称)、num(公司人数)、founder(创始人)、info(公司简介),要求属性进行封装即:属性私有并提供公有方法。

(a)请根据下列信息创建5个公司对象,各属性值来自下面的信息

”1001,百度,2000,李彦宏,全球最大的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。”

“1010,腾讯,10000,马化腾,深圳市腾讯计算机系统有限公司成立于1998年11月,由马化腾、张志东、许晨晔、陈一丹、曾李青五位创始人共同创立。”

“1020,阿里巴巴,20000,马云,阿里巴巴网络技术有限公司(简称:阿里巴巴集团)”

“1050,京东,8000,刘强东,京东(JD.com)是中国最大的自营式电商企业,2015年第一季度在中国自营式B2C电商市场的占有率为56.3%。”

“1030,小米,5000,雷军,小米公司成立于2010年4月,是一家专注于智能产品自主研发的移动互联网公司。”

(b)请将上述的5个对象添加到TreeMap

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));
        }
    }
}
posted @ 2017-04-19 20:40  TCB_Java  阅读(6869)  评论(1编辑  收藏  举报