黑马程序员技术交流社区

标题: 关于Map的遍历方式,我这算两种还是四种 [打印本页]

作者: 然后呢8908    时间: 2015-9-17 21:37
标题: 关于Map的遍历方式,我这算两种还是四种
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class TreeMapDemo {

        public static void main(String[] args) {
                TreeMap<Student, String> tm=new TreeMap<Student, String>(new Comparator<Student>() {

                        @Override
                        public int compare(Student o1, Student o2) {
                                int num=o1.getName().compareTo(o2.getName());
                                int num2=num==0?o1.getAge()-o2.getAge():num;
                                return num2;
                        }
                });
               
                tm.put(new Student("李四", 38),"北京");
                tm.put(new Student("赵六", 24),"上海");
                tm.put(new Student("小强", 31),"沈阳");
                tm.put(new Student("旺财", 28),"大连");
                tm.put(new Student("赵六", 24),"上海");
                tm.put(new Student("小强", 31),"沈阳");
               
               
                //1、通过迭代器(键找值)
                Iterator<Student> it=tm.keySet().iterator();
                while(it.hasNext()){
                        Student s=it.next();
                        String str=tm.get(s);
                        System.out.println(s.getName()+"--"+s.getAge()+"--"+str);
                }
               
                System.out.println("---------------");
                //通过增强for(键找值)
               
                Set<Student> set=tm.keySet();
                for(Student ss:set){
                        String s=tm.get(ss);
                        System.out.println(ss.getName()+"--"+ss.getAge()+"--"+s);

                }
                //2、增强for(键值对)
                System.out.println("---------------");
                Iterator<Map.Entry<Student, String>> it2=tm.entrySet().iterator();
                while(it2.hasNext()){
                        Map.Entry<Student, String> s = it2.next();
                        Student student=s.getKey();
                        String string=s.getValue();
                        System.out.println(student.getName()+"--"+student.getAge()+"--"+string);

                }
                System.out.println("---------------");
                //迭代器(键值对)
                Set<Map.Entry<Student, String>> set2= tm.entrySet();
                for(Map.Entry<Student, String> ss:set2){
                        Student s=ss.getKey();
                        String str=ss.getValue();
                        System.out.println(s.getName()+"--"+s.getAge()+"--"+str);

                }
               
       
               
        }
}

public class Student {
        private String name;
        private int age;
        public Student() {
                super();
                // TODO Auto-generated constructor stub
        }
        public Student(String name, int age) {
                super();
                this.name = name;
                this.age = age;
        }
        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;
        }
        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + age;
                result = prime * result + ((name == null) ? 0 : name.hashCode());
                return result;
        }
        @Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (getClass() != obj.getClass())
                        return false;
                Student other = (Student) obj;
                if (age != other.age)
                        return false;
                if (name == null) {
                        if (other.name != null)
                                return false;
                } else if (!name.equals(other.name))
                        return false;
                return true;
        }
       
       

}
作者: anyway1919    时间: 2015-9-17 23:08
楼主总结的很详细啊,有一些方法本人没尝试过。一会敲敲
  Set<Map.Entry<Student, String>> set2= tm.entrySet();
                for(Map.Entry<Student, String> ss:set2){
                        Student s=ss.getKey();
                        String str=ss.getValue();
                        System.out.println(s.getName()+"--"+s.getAge()+"--"+str);



楼主你看你这段代码是不是有点问题:
就是集合的构造函数传入比较器的这段代码:不知道楼主是否想实现按照年龄排序,年龄相同再根据姓名

public int compare(Student o1, Student o2) {
                                int num=o1.getName().compareTo(o2.getName());
                                int num2=num==0?o1.getAge()-o2.getAge():num;
                                return num2==0?num:num2;
                        }

作者: anyway1919    时间: 2015-9-17 23:09
我看错了,楼主已经写明了
作者: 然后呢8908    时间: 2015-9-18 21:13
anyway1919 发表于 2015-9-17 23:08
楼主总结的很详细啊,有一些方法本人没尝试过。一会敲敲
  Set set2= tm.entrySet();
                for( ...

谢谢点评。
作者: 史世锋    时间: 2015-9-18 21:31
楼主多点注释啊
作者: 然后呢8908    时间: 2015-9-18 21:32
史世锋 发表于 2015-9-18 21:31
楼主多点注释啊

好吧,我不是很习惯写注释,我也意识到了这是个不好的习惯。
作者: 史世锋    时间: 2015-9-18 21:34
然后呢8908 发表于 2015-9-18 21:32
好吧,我不是很习惯写注释,我也意识到了这是个不好的习惯。

我以前也不习惯写注释,直到我上次看不懂自己写的代码后。。。。。




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