TreeMap集合特点、排序原理

来源:互联网 发布:双色球软件2016破解 编辑:程序博客网 时间:2024/05/22 13:56

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));        }    }}
0 0