黑马程序员技术交流社区

标题: 求讲解一下题目 [打印本页]

作者: 铿锵的小黑马    时间: 2015-10-10 21:38
标题: 求讲解一下题目
请编写程序,完成集合嵌套,并遍历
传智播客
                        jc        基础班
                                        张三                20
                                        李四                22
                        jy        就业班
                                        王五                21
                                        赵六                23



作者: 奈何桥上升国旗    时间: 2015-10-10 21:38
传智播客
                        jc        基础班
                                        张三                20
                                        李四                22
                        jy        就业班
                                        王五                21
                                        赵六                23

        class Student {
        private String id;
        private String name;
        public Student() {
                super();
        }
        public Student(String id, String name) {
                super();
                this.id = id;
                this.name = name;
        }
        public String getId() {
                return id;
        }
        public void setId(String id) {
                this.id = id;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
}
HashMap嵌套HashMap
        public class HashMapTest {
        public static void main(String[] args) {
                // 1: 创建基础班集合 HashMap<String, String>
                HashMap<String, String> base = new HashMap<String, String>();
                // 2: 向基础班集合添加元素
                base.put("01", "陈如水");
                base.put("02", "左帅");
               
                //3: 创建就业班集合  HashMap<String, String>
                HashMap<String, String> job = new HashMap<String, String>();
                //4: 向就业班集合添加元素
                job.put("01", "李天成");
                job.put("02", "许伟");
               
                //5: 创建一个czbk集合   HashMap<  String,  HashMap<String, String> >
                HashMap<String, HashMap<String, String>> czbk = new HashMap<String, HashMap<String, String>>();
                //6: 向czbk集合中 添加班级元素
                czbk.put("基础班", base);
                czbk.put("就业班", job);
               
                //7: 遍历
                //遍历学校集合, 得到每一个班级
                Set<Entry<String, HashMap<String, String>>> classes = czbk.entrySet();
                // 得到每一个班级
                for (Entry<String, HashMap<String, String>> clazz : classes) {
                        //获取班级名称
                        String name = clazz.getKey();
                        System.out.println(name);
                        //获取班级元素
                        HashMap<String, String> students = clazz.getValue();
                        //获取到每一个学生信息
                        Set<Entry<String, String>> studentSet = students.entrySet();
                        for (Entry<String, String> student : studentSet) {
                                //获取学生的学号
                                String id = student.getKey();
                                //获取学生的姓名
                                String n = student.getValue();
                                System.out.println("\t"+id+"..."+n);
                        }
                }
        }
}
HashMap嵌套ArrayList
        public class HashMapTest {
        public static void main(String[] args) {
                //1: 创建基础班集合    ArrayList<Student>
                ArrayList<Student> base = new ArrayList<Student>();
                //2: 向基础班集合添加元素
                base.add(new Student("01","陈如水"));
                base.add(new Student("02","左帅"));
               
                //3: 创建就业班集合    ArrayList<Student>
                ArrayList<Student> job = new ArrayList<Student>();
                //4: 向就业班集合添加元素
                job.add(new Student("01","李天成"));
                job.add(new Student("02","许伟"));
               
                //5: 创建czbk学校集合    HashMap<String,  ArrayList<Student> >
                HashMap<String, ArrayList<Student>> czbk = new HashMap<String, ArrayList<Student>>();
                //6: 把班级添加到 学校集合中
                czbk.put("基础班", base);
                czbk.put("就业班", job);
               
                //7: 遍历
                //获取到所有班级的名称
                Set<String> classNames = czbk.keySet();
                //获取到每一个班级名称
                for (String className : classNames) {
                        System.out.println(className);
                        //通过班级名称,获取到班级学生信息
                        ArrayList<Student> Students = czbk.get(className);
                        //获取到每一个学生信息
                        for(Student s : Students){
                                System.out.println("\t"+s.getId()+"..."+s.getName());
                        }
                }
        }
}
ArrayList嵌套HashMap
public class ArrayListTest {
        public static void main(String[] args) {
                // 1: 创建基础班集合 HashMap<String, String>
                HashMap<String, String> base = new HashMap<String, String>();
                // 2: 向基础班集合添加元素
                base.put("01", "陈如水");
                base.put("02", "左帅");
               
                //3: 创建就业班集合  HashMap<String, String>
                HashMap<String, String> job = new HashMap<String, String>();
                //4: 向就业班集合添加元素
                job.put("01", "李天成");
                job.put("02", "许伟");
               
                //5:创建一个czbk集合  ArrayList<HashMap<String, String> >
                ArrayList<HashMap<String, String> > czbk = new ArrayList<HashMap<String, String>>();
                //6: 向czbk集合中 添加班级元素
                czbk.add(base);
                czbk.add(job);
                //7: 遍历(难点)
                //获取到每一个班级
                for (HashMap<String, String> clazz : czbk) {
                        //获取到班级的所有学生
                        Set<Entry<String, String>> students = clazz.entrySet();
                        //获取到每一个学生
                        for (Entry<String, String> student : students) {
                                String id = student.getKey();
                                String name = student.getValue();
                                System.out.println(id +"--"+name );
                        }
                }
        }
}
5、请编写程序,完成模拟斗地主案例

public class PokerDemo {
        public static void main(String[] args) {
                // 创建一个HashMap集合
                HashMap<Integer, String> hm = new HashMap<Integer, String>();

                // 创建一个ArrayList集合
                ArrayList<Integer> array = new ArrayList<Integer>();

                // 创建花色数组和点数数组
                // 定义一个花色数组
                String[] colors = { "♠", "♥", "♣", "♦" };
                // 定义一个点数数组
                String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
                                "K", "A", "2", };

                // 从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号即可。
                int index = 0;

                for (String number : numbers) {
                        for (String color : colors) {
                                String poker = color.concat(number);
                                hm.put(index, poker);
                                array.add(index);
                                index++;
                        }
                }
                hm.put(index, "小王");
                array.add(index);
                index++;
                hm.put(index, "大王");
                array.add(index);

                // 洗牌(洗的是编号)
                Collections.shuffle(array);

                // 发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收)
                TreeSet<Integer> sunQuan = new TreeSet<Integer>();
                TreeSet<Integer> caoCao = new TreeSet<Integer>();
                TreeSet<Integer> liuBei = new TreeSet<Integer>();
                TreeSet<Integer> diPai = new TreeSet<Integer>();

                for (int x = 0; x < array.size(); x++) {
                        if (x >= array.size() - 3) {
                                diPai.add(array.get(x));
                        } else if (x % 3 == 0) {
                                sunQuan.add(array.get(x));
                        } else if (x % 3 == 1) {
                                caoCao.add(array.get(x));
                        } else if (x % 3 == 2) {
                                liuBei.add(array.get(x));
                        }
                }

                // 看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
                lookPoker("孙权", sunQuan, hm);
                lookPoker("曹操", caoCao, hm);
                lookPoker("刘备", liuBei, hm);
                lookPoker("底牌", diPai, hm);
        }

        // 写看牌的功能
        public static void lookPoker(String name, TreeSet<Integer> ts,
                        HashMap<Integer, String> hm) {
                System.out.print(name + "的牌是:");
                for (Integer key : ts) {
                        String value = hm.get(key);
                        System.out.print(value + " ");
                }
                System.out.println();
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2