JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [問]MAP觀念應用
ggininder





發文: 35
積分: 0
於 2018-11-16 01:22 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
關於MAP

假設今天要幫學校設計CODE

MAP的特性就是 KEY - VALUE

那如果有多組KEY往下才能找到我的目標時

例如我今天的身分是教育部

教育部 : 國中 : 班級 : 班號

所以對應的是 MAP < String , Map < String , Map < String , Map < String , String >>>>

不知道觀念對不對?
還有這這map的用法有什麼術語嗎?
感謝各位大大的提點。


reply to postreply to post
作者 Re:[問]MAP觀念應用 [Re:ggininder]
clock

小時候在看國外測試機器人的影片



發文: 65
積分: 0
於 2018-11-16 08:25 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
你說的是這樣子嗎
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
 public static void main(String[] args) {
        HashMap<String, HashMap<String, HashMap<String, Integer>>> hmap = new HashMap();
 
        HashMap<String, Integer> h1 = new HashMap();
        h1.put("一年一班", 25);
        h1.put("二年一班", 25);
        h1.put("三年一班", 25);
        HashMap<String, HashMap<String, Integer>> h2 = new HashMap();
        h2.put("前鎮國中", h1);
        hmap.put("國中", h2);
 
        h1 = new HashMap();
        h1.put("一年一班", 20);
        h1.put("二年一班", 21);
        h1.put("三年一班", 30);
        h1.put("四年一班", 24);
        h1.put("五年一班", 28);
        h1.put("六年一班", 30);
        h2 = new HashMap();
        h2.put("前鎮國小", h1);
        hmap.put("國小", h2);
 
        System.out.println(hmap);
        int total = hmap.get("國中").get("前鎮國中").values().stream().mapToInt(s -> s).sum();
        System.out.println("前鎮國中人數:" + total);      
        total = hmap.get("國小").get("前鎮國小").values().stream().mapToInt(s -> s).sum();
        System.out.println("前鎮國小人數:" + total);
     
    }


reply to postreply to post
c:你好像很喜歡研究機械產品
X:我從小就跟博士做研究
c:哪位博士
X:南宮博士
作者 Re:[問]MAP觀念應用 [Re:ggininder]
mmolis





發文: 127
積分: 0
於 2018-11-16 09:15 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
你想要做一個組織樹是嗎?
Map資料結構符合你的需求
基本上, 它是可以構成樹狀資料結構
但是, 這樣的資料結構還滿不好看的, 可以用就好

ggininder wrote:
關於MAP

假設今天要幫學校設計CODE

MAP的特性就是 KEY - VALUE

那如果有多組KEY往下才能找到我的目標時

例如我今天的身分是教育部

教育部 : 國中 : 班級 : 班號

所以對應的是 MAP < String , Map < String , Map < String , Map < String , String >>>>

不知道觀念對不對?
還有這這map的用法有什麼術語嗎?
感謝各位大大的提點。


mmolis edited on 2018-11-16 09:18
reply to postreply to post
作者 Re:[問]MAP觀念應用 [Re:ggininder]
frankiewu





發文: 11
積分: 0
於 2018-11-16 09:58 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
個人不建議濫用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
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
//國小class
class elementary_chool {
    String SchoolName;
    ArrayList<class_detail> put_class=new ArrayList();
    public ArrayList<class_detail> getPut_class() {
        return put_class;
    }
 
    public void setPut_class(ArrayList<class_detail> put_class) {
        this.put_class = put_class;
    }
 
    public String getSchoolName() {
        return SchoolName;
    }
 
    public void setSchoolName(String schoolName) {
        SchoolName = schoolName;
    }
 
}
//國中class
class junior_high {
    String SchoolName;
 
    ArrayList<class_detail> put_class=new ArrayList();
    public ArrayList<class_detail> getPut_class() {
        return put_class;
    }
 
    public void setPut_class(ArrayList<class_detail> put_class) {
        this.put_class = put_class;
    }
 
    public String getSchoolName() {
        return SchoolName;
    }
    public void setSchoolName(String SchoolName) {
        this.SchoolName = SchoolName;
    }
 
}
//高中class
class Senior_High {
    
    String SchoolName;
 
    ArrayList<class_detail> put_class=new ArrayList();
    public ArrayList<class_detail> getPut_class() {
        return put_class;
    }
 
    public void setPut_class(ArrayList<class_detail> put_class) {
        this.put_class = put_class;
    }
 
    
    public String getSchoolName() {
        return SchoolName;
    }
    public void setSchoolName(String schoolName) {
        SchoolName = schoolName;
    }
 
}
class class_detail{
    String ClassName;
    int Studentnum;
    public  class_detail(String ClassName,int Studentnum){
        this.ClassName=ClassName;
        this.Studentnum=Studentnum;
    }
    public String getClassName() {
        return ClassName;
    }
 
    public void setClassName(String className) {
        ClassName = className;
    }
}
public class main implements test {
    public static void main(String args[]) {
        //建立國小物件
        elementary_chool elementary_chool = new elementary_chool();
        elementary_chool.setSchoolName("內湖國小");
        class_detail class1=new class_detail("一年一班",20);
        class_detail class2=new class_detail("一年二班",21);
        elementary_chool.getPut_class().add(class1);
        elementary_chool.getPut_class().add(class2);
        //建立國中物件
        junior_high junior_high = new junior_high();
        junior_high.setSchoolName("內湖國中");
        class1=new class_detail("二年一班",22);
        class2=new class_detail("二年一班",23);
        junior_high.getPut_class().add(class1);
        junior_high.getPut_class().add(class2);
        //建立高中物件
        Senior_High senior_high = new Senior_High();
        senior_high.setSchoolName("內湖高中");
        class1=new class_detail("三年一班",24);
        class2=new class_detail("三年二班",25);
        senior_high.getPut_class().add(class1);
        senior_high.getPut_class().add(class2);
        //產生(map)EducationEntiy   置入國小、國中、高中 物件
        Map<String, Object> EducationEntiy = new HashMap<String, Object>();
        EducationEntiy.put("國小", elementary_chool);
        EducationEntiy.put("國中", junior_high);
        EducationEntiy.put("高中", senior_high);
        //從EducationEntiy 取回物件
        elementary_chool show_elementary_chool = (elementary_chool) EducationEntiy.get("國小");
        junior_high show_junior_high = (junior_high) EducationEntiy.get("國中");
        Senior_High show_Senior_High = (Senior_High) EducationEntiy.get("高中");
        //國小內容物印出
        System.out.println(show_elementary_chool.getSchoolName());
        for (class_detail a:show_elementary_chool.getPut_class()
             ) {
            System.out.println("班級:"+a.ClassName+"人數:"+a.Studentnum);
        }
        //國中內容物印出
        System.out.println(show_junior_high.getSchoolName());
        for (class_detail a:show_junior_high.getPut_class()
        ) {
            System.out.println("班級:"+a.ClassName+"人數:"+a.Studentnum);
        }
        //高中內容物印出
        System.out.println(show_Senior_High.getSchoolName());
        for (class_detail a:show_Senior_High.getPut_class()
        ) {
            System.out.println("班級:"+a.ClassName+"人數:"+a.Studentnum);
        }
    }
}

執行結果:
內湖國小
班級:一年一班人數:20
班級:一年二班人數:21
內湖國中
班級:二年一班人數:22
班級:二年一班人數:23
內湖高中
班級:三年一班人數:24
班級:三年二班人數:25


reply to postreply to post
作者 Re:[問]MAP觀念應用 [Re:ggininder]
clock

小時候在看國外測試機器人的影片



發文: 65
積分: 0
於 2018-11-17 10:37 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
乾脆MAP +ArrayList+資料封裝
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
import java.util.ArrayList;
import java.util.HashMap;
 
public class ClockClass3 {
 
    public static void main(String[] args) {
        HashMap<String, ArrayList<Student>> hmap = new HashMap();
 
        String classNameStr = "一、二、三、四、五、六、七、八、九、十";
 
        String[] classNameAry = classNameStr.split("、");
        String name = "陳、林、黃、張、李、王、吳、蔡、劉、楊、許、鄭、謝、"
                + "郭、賴、曾、洪、邱、周、葉、廖、徐、莊、蘇、江、何、蕭、"
                + "羅、呂、高、彭、朱、詹、胡、簡、沈、施、柯、盧、余、翁、"
                + "潘、游、魏、顏、梁、趙、蘇、方、孫、鐘、戴、杜、連、宋、"
                + "鄧、曹、侯、溫、傅、藍、姜、馮、白、涂、蔣、姚、丁、童、"
                + "黎、金、韓、錢、夏、袁、倪、阮、柳、毛、駱";
 
        String[] nameAry = name.split("、");
        ArrayList<Student> a1 = new ArrayList();
 
        for (int i = 0; i < 3; i++) {
            int studentCount = (int) (Math.random() * 5) + 3;
            String className = classNameAry[i] + "年一班";
            String classCode = "Y" + (i + 1);
            for (int j = 0; j < studentCount; j++) {
                String stuNum = classCode + "S00" + (j + 1);
                String stuName = nameAry[(int) (Math.random() * nameAry.length)];
                Student student = new Student("前鎮國中", className, stuNum, stuName);
                a1.add(student);
            }
        }
        hmap.put("前鎮國中", a1);
        a1 = new ArrayList();
        for (int i = 0; i < 6; i++) {
            int studentCount = (int) (Math.random() * 5) + 3;
            String className = classNameAry[i] + "年一班";
            String classNum = "Y" + (i + 1);
            for (int j = 0; j < studentCount; j++) {
                String stuNum = classNum + "S00" + (j + 1);
                String stuName = nameAry[(int) (Math.random() * nameAry.length)];
                Student student = new Student("前鎮國小", className, stuNum, stuName);
                a1.add(student);
            }
        }
        hmap.put("前鎮國小", a1);
 
        ArrayList<Student> reslutList = hmap.get("前鎮國中");
        String classname = reslutList.get(0).className;
        System.out.println("(前鎮國中)" + classname);
        for (Student s : reslutList) {
            if (!s.className.equalsIgnoreCase(classname)) {
                System.out.println("-----------------");
                classname = s.className;
                System.out.println("(前鎮國中)" + classname);
            }
 
            System.out.println(s);
        }
        System.out.println("-----------------------------");
        reslutList = hmap.get("前鎮國小");
        classname = reslutList.get(0).className;
        System.out.println("(前鎮國小)" + classname);
 
        for (Student s : reslutList) {
            if (!s.className.equalsIgnoreCase(classname)) {
                System.out.println("-----------------");
                classname = s.className;
                System.out.println("(前鎮國小)" + classname);
            }
 
            System.out.println(s);
        }
    }
}
 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Student {
    String schoolName;
    String className;
    String stuNum;
    String name;
 
   
 
    public Student(String schoolName, String className, String stuNum, String name) {
        this.schoolName = schoolName;
        this.className = className;
        this.stuNum = stuNum;
        this.name = name;
    }
 
    
 
    @Override
    public String toString() {
        return "學號:" + stuNum + ", 姓:" + name ;
    }
    
}


clock edited on 2018-11-17 10:41
reply to postreply to post
c:你好像很喜歡研究機械產品
X:我從小就跟博士做研究
c:哪位博士
X:南宮博士
作者 Re:[問]MAP觀念應用 [Re:frankiewu]
ggininder





發文: 35
積分: 0
於 2018-11-19 01:40 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
frankiewu wrote:
個人不建議濫用MAP,
因為程式未來不一定都是你在維護
是我的話寧願物件化


感謝各位大大分享經驗。

在業界常看到很複雜的code,如果都能標準化是最好的。
但是趕工的情況下,事情就會越來越複雜,
這是目前專案看到類似的程式碼。

所以充滿疑惑上來詢問,看是不是跟我預想的情況差不多。
看到那麼多大大分享,也解了我不少疑惑,再次感謝。


reply to postreply to post
» JWorld@TW »  Java 新手區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8