美文网首页
Java中的Map对象

Java中的Map对象

作者: Fighting_rain | 来源:发表于2017-05-17 17:02 被阅读0次

    将对象映射到其他对象的能力是一种解决问题的杀手锏。

    解决问题1:使用map解决Random取值次数进行计数:

    //10000次中,随机数0-20会出现的次数为map中的value,key为当前随机数
    public class MapRandom {
        public static void main(String[] args) {
            Random rand = new Random(47);
            Map<Integer,Integer> m = new HashMap<>();
            for(int i=0;i<10000;i++){
                int r = rand.nextInt(20);
                Integer freq = m.get(r);
                m.put(r, freq == null ? 1 : freq+1);
            }
            System.out.println(m);
        }
    }
    

    解决问题2:使用map设置复杂的数据结构,查看拥有多个宠物的人
    首先设置Pet类,Cat和Mouse继承自Pet:

    public class Pet {
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        Pet(String name){
            this.name = name;
        }
    }
    
    class Cat extends Pet{
        Cat(String name) {
            super(name);
        }
    }
    
    class Mouse extends Pet{
        Mouse(String name) {
            super(name);
        }
    }
    
    

    接下来设置Person类:

    public class Person {
        private String name;
        Person(String name){
            this.name = name;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
    

    最后设置MapOfList类,构造我们的数据结构

    public class MapOfList {
        public static void main(String[] args) {
            Map<Person, List<? extends Pet>> petPeople = new HashMap<>();
            petPeople.put(new Person("rainzhao"), Arrays.asList(new Cat("mao1"),new Mouse("shu1")));
            petPeople.put(new Person("zhangsan"), Arrays.asList(new Cat("mao2"),new Mouse("shu2")));
            
            for(Person person: petPeople.keySet()){
                System.out.println(person.getName() + " has:");
                for(Pet pet: petPeople.get(person)){
                    System.out.println(pet.getName());
                }
            }
        }
    }
    
    /*输出结构为:
    rainzhao has:
    mao1
    shu1
    zhangsan has:
    mao2
    shu2
    */
    

    这里解释一下泛型中的<? extends Pet>,?这里是代表类型不确定使用?来代替,当调用时会是你所传递的参数类型。这里为什么不直接写成<Pet>是因为我们所传入的List类型不确定,有可能是Cat也有可能是Mouse,但是其实这里直接设置为<Pet>也是不会报错的。具体有关泛型通配符的使用请移步:通配符的使用

    相关文章

      网友评论

          本文标题:Java中的Map对象

          本文链接:https://www.haomeiwen.com/subject/gledxxtx.html