2017-03-24-Map-集合工具类Collections
Xplorist Lv6

2017-03-24-Map-集合工具类Collections

debug模式:

*F5.单步运行, 遇到函数调用函数,进入函数

  • F6.单步运行,一条一条运行代码,不进入函数

*F7.退出调用的函数,回到调用点

  • F8.一次完成全部代码  ctrl+shift+i可以在debug看一小段程序运行的结果或者获取到的值是多少

知识点1:

Map不是地图是映射

Map:键值对key-Value

TreeSet 有序set

TreeMap 有序map

知识点2:

Collections是集合Collection的工具类

Comparable接口

重写compareTo()方法

Comparator接口

重写compare()方法

知识点3:

总结:

判断两个对象是否相同,Object类中的equals方法,还要重写hashCode()方法。

通过syso打印一个对象,会去调用Object类中的toString()方法,如果要改变一个对象的输出,那么就需要在这个对象的类中重写Object的toString()方法。

list中的排序,Collections类中的静态方法,Collections.sort(list)和Collections.sort(list,c)方法,分别关系到Comparable接口的compareTo()方法和Comparator接口中的compare()方法。

(Comparable接口是可比较的意思,在具体比较的类中实现,方法就是compareTo(),和谁比较,而comparator接口是比较器,需要两个对象来比较,所以方法是compare().)

实例1:

将JSON格式的数据存进Map

/{
 “persion_info”:
 {
   “persion_head”: “http://XXX/XXX/head.jpg",
   “persion_name”: “Jason Jang”,
   “persion_email”: “mol_jason_lang@gmail.com“,
   “persion_last_time”: “5015-08-21 15:20:36”
 },
 “Wallet_info”:
 {
   “MOL Account”: “Malaysia”,
   “Balance”: “6250 MOLPoints / USD 62.50”,
   “MOL REWARDS”: 0
 }
}
/

思路:

直接将数据存进Map即可

核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void packData(){
        Map<String,Map<String,Object>> map=new HashMap<String,Map<String,Object>>();
        
        Map<String,Object> map1=new HashMap<String,Object>();
        Map<String,Object> map2=new HashMap<String,Object>();
        
        map1.put("persion_head", "http://XXX/XXX/head.jpg");
        map1.put("persion_name", "Jason Jang");
        map1.put("persion_email", "mol_jason_lang@gmail.com");
        map1.put("persion_last_time", "5015-08-21 15:20:36");
        
        map2.put("MOL Account", "Malaysia");
        map2.put("Balance", "6250 MOLPoints / USD 62.50");
        map2.put("MOL REWARDS", 0);
        
        map.put("persion_info", map1);
        map.put("Wallet_info", map2);
        
        System.out.println(map);
    }

实例2:

将JSON格式的数据存储进入Map

{
 “persion_info”:
 {
   “persion_head”: “http://XXX/XXX/head.jpg",
   “persion_name”: “Jason Jang”,
   “persion_email”: “mol_jason_lang@gmail.com“,
   “persion_last_time”: “5015-08-21 15:20:36”
 },
 “Wallet_info”:
 {
   “MOL Account”: “Malaysia”,
   “Balance”: “6250 MOLPoints / USD 62.50”,
   “MOL REWARDS”: 0
 },
 “region”: [ { “account”: “Malaysia”},{ “account”: “TaiWan”} ],
 “languages”: [{“language”: “English”},{“language”: “Chinese”}]
}*/

思路:

直接一层一层地存储进入Map

核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public static void packData1(){
        Map<String,Object> map=new HashMap<String,Object>();
        
        Map<String,String> map1=new HashMap<String,String>();
        Map<String,Object> map2=new HashMap<String,Object>();
        
        List<Map<String,String>> list1=new ArrayList<Map<String,String>>();
        List<Map<String,String>> list2=new ArrayList<Map<String,String>>();
        
        Map<String,String> map3=new HashMap<String,String>();
        Map<String,String> map4=new HashMap<String,String>();
        Map<String,String> map5=new HashMap<String,String>();
        Map<String,String> map6=new HashMap<String,String>();
        
        map3.put("account", "Malaysia");
        map4.put("account", "TaiWan");
        
        map5.put("language", "English");
        map6.put("language", "Chinese");
        
        map1.put("persion_head", "http://XXX/XXX/head.jpg");
        map1.put("persion_name", "Jason Jang");
        map1.put("persion_email", "mol_jason_lang@gmail.com");
        map1.put("persion_last_time", "5015-08-21 15:20:36");
        
        map2.put("MOL Account", "Malaysia");
        map2.put("Balance", "6250 MOLPoints / USD 62.50");
        map2.put("MOL REWARDS", 0);
        
        list1.add(map3);
        list1.add(map4);
        list2.add(map5);
        list2.add(map6);
        
        map.put("persion_info", map1);
        map.put("Wallet_info", map2);
        map.put("region", list1);
        map.put("languages", list2);
        
        System.out.println(map);
    }

实例3:

集合排序

Student对象中有name,age,height(身高)几个属性

创建4个Student对象,然后将这4个对象存储到list中,

然后将list中的元素进行排序,如果name相同,就按照age进行排序,如果age相同,就按照height进行排序

思路:

1.student类中实现Comparable接口,然后实现compareTo()方法,使用Collections.sort(list);方法,

2.Collections.sort(list,comparator接口的实现类对象);另外定义一个类,然后实现Comparator接口,在类中实现compare()方法

思路1核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
public class Student implements Comparable<Student> {
    private String name;
    private int age;
    private double high;

    public Student() {

    }

    public Student(String name, int age, double high) {
        super();
        this.name = name;
        this.age = age;
        this.high = high;
    }

    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 double getHigh() {
        return high;
    }

    public void setHigh(double high) {
        this.high = high;
    }

    @Override
    public int compareTo(Student o) {
        // TODO Auto-generated method stub
        
        if(!this.name.equals(o.name)){
            return this.name.compareTo(o.name);
        }else if(this.age!=o.age){
            return this.age-o.age;
        }else if(this.high!=o.high){
            return (int)((this.high-o.high)*100);
        }
        return 0;
    }
    
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "【name: "+name+" age: "+age+" high: "+high+"】";
    }

}

public static void sortTest(){
        Student s1=new Student("s1",11,1.1);
        Student s2=new Student("s1",12,1.2);
        Student s3=new Student("s2",13,1.3);
        Student s4=new Student("s2",13,1.4);
        
        List<Student> list=new ArrayList<Student>();
        
        list.add(s4);
        list.add(s2);
        list.add(s1);
        list.add(s3);
        
        System.out.println(list);
        
        Collections.sort(list);
        System.out.println(list);
        
        Collections.reverse(list);
        System.out.println(list);
        
        Collections.sort(list);
        System.out.println(list);
        
    }

思路2核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class CompratorTest implements Comparator<Student>{

    @Override
    public int compare(Student o1, Student o2) {

        if(!o1.getName().equals(o2.getName())){
            return o1.getName().compareTo(o2.getName());
        }else if(o1.getAge()!=o2.getAge()){
            return o1.getAge()-o2.getAge();
        }else if(o1.getHigh()!=o2.getHigh()){
            return (int)((o1.getHigh()-o2.getHigh())*100);
        }
        return 0;
    }

}


    public static void sortTest(){
        Student s1=new Student("s1",11,1.1);
        Student s2=new Student("s1",12,1.2);
        Student s3=new Student("s2",13,1.3);
        Student s4=new Student("s2",13,1.4);
        
        List<Student> list=new ArrayList<Student>();
        
        list.add(s4);
        list.add(s2);
        list.add(s1);
        list.add(s3);
        
        System.out.println(list);
        
        Collections.sort(list);
        System.out.println(list);
        
        Collections.reverse(list);
        System.out.println(list);
        
        CompratorTest c=new CompratorTest();
        Collections.sort(list,c);
        System.out.println(list);
        
    }
 评论
// variables $gt-color-main := #6190e8 $gt-color-sub := #a1a1a1 $gt-color-loader := #999999 $gt-color-error := #ff3860 $gt-color-hr := #e9e9e9 $gt-color-comment-txt := #333333 $gt-color-link-active := #333333 $gt-color-btn := #ffffff $gt-size-base := 16px // default font-size $gt-size-border-radius := 5px $gt-breakpoint-mobile := 479px $gt-mask-z-index := 9999 // functions & mixins clearfix() { &:before &:after { display table clear both content "" } } em($px, $base-size = $gt-size-base) { u = unit($px) if (u is 'px') { unit($px / $base-size, 'em') } else { unit($px, u) } } mobile() { @media (max-width $gt-breakpoint-mobile) { {block} } } // variables - calculated $gt-size-loader-dot := em(6px) $gt-size-loader := em(28px) $gt-size-avatar := em(50px) $gt-size-avatar-mobi := em(32px) // styles // Put everything under container to avoid style conflicts .comments-container { .gt-container { box-sizing border-box * { box-sizing border-box } font-size $gt-size-base // common a { color $gt-color-main &:hover { color lighten($gt-color-main, 20%) border-color lighten($gt-color-main, 20%) } &.is--active { color $gt-color-link-active cursor default !important &:hover { color $gt-color-link-active } } } .hide { display none !important } // icons .gt-svg { display inline-block width em(16px) height em(16px) vertical-align sub svg { width 100% height 100% fill $gt-color-main } } .gt-ico { display inline-block &-text { margin-left em(5px) } &-github { width 100% height 100% .gt-svg { width 100% height 100% } svg { fill inherit } } } // loader .gt-spinner { position relative &::before { position absolute top 3px box-sizing border-box width em(12px) height em(12px) margin-top em(-3px) margin-left em(-6px) border 1px solid $gt-color-btn border-top-color $gt-color-main border-radius 50% animation gt-kf-rotate 0.6s linear infinite content '' } } .gt-loader { position relative display inline-block width $gt-size-loader height $gt-size-loader font-style normal // font-size: $gt-size-loader line-height $gt-size-loader border 1px solid $gt-color-loader border-radius 50% animation ease gt-kf-rotate 1.5s infinite &:before { position absolute top 0 left 50% display block width $gt-size-loader-dot height $gt-size-loader-dot margin-top -($gt-size-loader-dot / 2) margin-left -($gt-size-loader-dot / 2) background-color $gt-color-loader border-radius 50% content '' } } // avatar .gt-avatar { display inline-block width $gt-size-avatar height $gt-size-avatar +mobile() { width $gt-size-avatar-mobi height $gt-size-avatar-mobi } img { width 100% height auto border-radius 3px } &-github { width $gt-size-avatar - em(2px) height $gt-size-avatar - em(2px) cursor pointer +mobile() { width $gt-size-avatar-mobi - em(2px) height $gt-size-avatar-mobi - em(2px) } } } // button .gt-btn { display inline-block padding em(12px) em(20px) color $gt-color-btn font-size em(12px) line-height 1 white-space nowrap text-decoration none background-color $gt-color-main border 1px solid $gt-color-main border-radius $gt-size-border-radius outline none cursor pointer &-text { font-weight 400 } &-loading { position relative display inline-block width em(12px) height em(16px) margin-left em(8px) vertical-align top } &.is--disable { cursor not-allowed opacity 0.5 } &-login { margin-right 0 } &-preview { color $gt-color-main background-color var(--background-color) &:hover { background-color var(--second-background-color) } } &-public { &:hover { background-color lighten($gt-color-main, 20%) border-color lighten($gt-color-main, 20%) } } } } &-loadmore // loadmore /* error */ .gt-error { margin em(10px) color $gt-color-error text-align center } // initing .gt-initing { padding em(20px) 0 text-align center &-text { margin em(10px) auto font-size 92% } } // no int .gt-no-init { padding em(20px) 0 text-align center } // link .gt-link { border-bottom 1px dotted $gt-color-main &-counts &-project { text-decoration none } } // meta .gt-meta { position relative z-index 10 margin em(20px) 0 padding em(16px) 0 font-size em(16px) border-bottom 1px solid $gt-color-hr clearfix() } .gt-counts { margin 0 em(10px) 0 0 color var(--default-text-color) } .gt-user { float right margin 0 font-size 92% &-pic { width 16px height 16px margin-right em(8px) vertical-align top } &-inner { display inline-block cursor pointer .gt-user-name { color var(--default-text-color) } } .gt-ico { margin 0 0 0 em(5px) svg { fill var(--default-text-color) } } .is--poping { .gt-ico { svg { fill $gt-color-main } } } } .gt-version { margin-left em(6px) color $gt-color-sub } .gt-copyright { margin 0 em(15px) em(8px) padding-top em(8px) border-top 1px solid var(--border-color) } // popup .gt-popup { position absolute top em(38px) right 0 display inline-block padding em(10px) 0 font-size em(14px) letter-spacing 0.5px background var(--background-color) border 1px solid var(--border-color) .gt-action { position relative display block margin em(8px) 0 padding 0 em(18px) text-decoration none cursor pointer &.is--active { &:before { position absolute top em(7px) left em(8px) width em(4px) height em(4px) background $gt-color-main content '' } } } } // header .gt-header { position relative display flex &-comment { flex 1 margin-left em(20px) +mobile() { margin-left em(14px) } } &-textarea { display block box-sizing border-box width 100% min-height em(82px) max-height em(240px) padding em(12px) color var(--default-text-color) font-size em(14px) word-wrap break-word background-color var(--fourth-text-color) border 1px solid var(--border-color) border-radius $gt-size-border-radius outline none transition all 0.25s ease resize vertical &:hover { background-color var(--background-color) } } &-preview { padding em(12px) background-color var(--background-color) border 1px solid var(--border-color) border-radius $gt-size-border-radius } &-controls { position relative margin em(12px) 0 0 clearfix() +mobile() { margin 0 } &-tip { color $gt-color-main font-size em(14px) text-decoration none vertical-align sub +mobile() { display none } } .gt-btn { float right margin-left em(20px) +mobile() { float none width 100% margin em(12px) 0 0 } } } } &:after { position fixed top 0 right 0 bottom 100% left 0 opacity 0 content '' } &.gt-input-focused { position relative &:after { position fixed top 0 right 0 bottom 0 left 0 z-index $gt-mask-z-index background #000 opacity 0.6 transition opacity 0.3s, bottom 0s content '' } .gt-header-comment { z-index $gt-mask-z-index + 1 } } // comments .gt-comments { padding-top em(20px) &-null { text-align center } &-controls { margin em(20px) 0 text-align center } } // comment .gt-comment { position relative display flex padding em(10px) 0 &-content { flex 1 margin-left em(20px) padding em(12px) em(16px) overflow auto background-color var(--second-background-color) transition all ease 0.25s +mobile() { margin-left em(14px) padding em(10px) em(12px) } } &-header { position relative margin-bottom em(8px) font-size em(14px) } &-block-1 { float right width em(32px) height em(22px) } &-block-2 { float right width em(64px) height em(22px) } &-username { color $gt-color-main font-weight 500 text-decoration none &:hover { text-decoration underline } } &-text { margin-left em(8px) color $gt-color-sub } &-date { margin-left em(8px) color $gt-color-sub } &-like &-edit &-reply { position absolute height em(22px) &:hover { cursor pointer } } &-like { top 0 right em(32px) } &-edit &-reply { top 0 right 0 } &-body { // color: $gt-color-comment-txt !important color var(--second-text-color) !important .email-hidden-toggle a { display inline-block height 12px padding 0 9px color #444d56 font-weight 600 font-size 12px line-height 6px text-decoration none vertical-align middle background #dfe2e5 border-radius 1px &:hover { background-color #c6cbd1 } } .email-hidden-reply { display none white-space pre-wrap .email-signature-reply { margin 15px 0 padding 0 15px color #586069 border-left 4px solid #dfe2e5 } } .email-hidden-reply.expanded { display block } } &-admin { .gt-comment-content { background-color var(--fourth-text-color) } } } @keyframes gt-kf-rotate { 0% { transform rotate(0) } 100% { transform rotate(360deg) } } }