Java中HashMap集合案例、集合嵌套及统计字符串每个字符出现的次数

简介: HashMap集合案例、集合嵌套及统计字符串每个字符出现的次数的简单示例

 一、HashMap集合练习:键是String值是Student

需求:

创建一个HashMap集合,键是学号(String),值是学生对象(Student)。存储三个键值对元素,并遍历

思路:

1、定义学生类

2、创建HashMap集合对象

3、创建学生对象

4、把学生添加到集合

5、遍历集合

       方式一:键找值

       方式二:键值对对象找键和值

代码实现:

public class Student { 
    private String name; 
    private int age; 
    public Student() { 
    }
    public Student(String name, int age) { 
        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;
    }
}

image.gif

测试类:

public class HashMapDemo { 
    public static void main(String[] args) { 
        //创建HashMap集合对象 
        HashMap<String, Student> hm = new HashMap<String, Student>(); 
        //创建学生对象 
        Student s1 = new Student("小林", 20); 
        Student s2 = new Student("小张", 25); 
        Student s3 = new Student("小王", 23); 
        //把学生添加到集合 
        hm.put("itheima001", s1); 
        hm.put("itheima002", s2); 
        hm.put("itheima003", s3); 
        //方式一:键找值 
        Set<String> keySet = hm.keySet(); 
        for (String key : keySet) { 
            Student value = hm.get(key); 
            System.out.println(key + "," + value.getName() + "," + value.getAge()); 
        }
        System.out.println("--------"); 
        //方式二:键值对对象找键和值 
        Set<Map.Entry<String, Student>> entrySet = hm.entrySet(); 
        for (Map.Entry<String, Student> me : entrySet) { 
            String key = me.getKey(); 
            Student value = me.getValue(); 
            System.out.println(key + "," + value.getName() + "," + value.getAge()); 
        } 
    } 
}

image.gif

二、HashMap集合练习:键是Student值是String

需求:

■ 创建一个HashMap集合,键是学生对象(Student),值是居住地(String)。存储多个元素,并遍历。

■ 要求保证键的唯一性:如果学生对象的成员变量值相同,我们就认为是同一对象

学生类:

public class Student { 
    private String name; 
    private int age; 
    public Student() { 
    }
    public Student(String name, int age) { 
        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 boolean equals(Object o) { 
        if (this == o) return true; 
        if (o == null || getClass() != o.getClass()) return false; 
        Student student = (Student) o; 
        if (age != student.age) return false; 
        return name != null ? name.equals(student.name) : student.name == null;
    }
    @Override 
    public int hashCode() { 
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age; 
        return result; 
    } 
}

image.gif

测试类:

public class HashMapDemo { 
    public static void main(String[] args) { 
        //创建HashMap集合对象 
        HashMap<Student, String> hm = new HashMap<Student, String>(); 
        //创建学生对象 
        Student s1 = new Student("小林", 30); 
        Student s2 = new Student("小张", 35); 
        Student s3 = new Student("小王", 33); 
        Student s4 = new Student("小王", 33); 
        //把学生添加到集合 
        hm.put(s1, "西安"); 
        hm.put(s2, "武汉"); 
        hm.put(s3, "郑州"); 
        hm.put(s4, "北京"); 
        //遍历集合 
        Set<Student> keySet = hm.keySet(); 
        for (Student key : keySet) { 
            String value = hm.get(key); 
            System.out.println(key.getName() + "," + key.getAge() + "," + value); 
        } 
    } 
}

image.gif

三、集合嵌套:ArrayList嵌套HashMap

需求:

创建一个ArrayList集合,存储三个元素,每一个元素都是HashMap

每一个HashMap的键和值都是String,并遍历

代码实现:

public class ArrayListIncludeHashMapDemo { 
    public static void main(String[] args) { 
        //创建ArrayList集合 
        ArrayList<HashMap<String, String>> array = new ArrayList<HashMap<String, String>>(); 
        //创建HashMap集合,并添加键值对元素 
        HashMap<String, String> hm1 = new HashMap<String, String>(); 
        hm1.put("孙策", "大乔"); 
        hm1.put("周瑜", "小乔");
        //把HashMap作为元素添加到ArrayList集合 
        array.add(hm1); 
        HashMap<String, String> hm2 = new HashMap<String, String>(); 
        hm2.put("郭靖", "黄蓉"); 
        hm2.put("杨过", "小龙女"); 
        //把HashMap作为元素添加到ArrayList集合 
        array.add(hm2);
        HashMap<String, String> hm3 = new HashMap<String, String>(); 
        hm3.put("令狐冲", "任盈盈"); 
        hm3.put("林平之", "岳灵珊"); 
        //把HashMap作为元素添加到ArrayList集合 
        array.add(hm3); 
        //遍历ArrayList集合 
        for (HashMap<String, String> hm : array) { 
            Set<String> keySet = hm.keySet(); 
            for (String key : keySet) { 
                String value = hm.get(key); 
                System.out.println(key + "," + value); 
            } 
        } 
    } 
}

image.gif

四、集合嵌套:HashMap嵌套ArrayList

需求:

创建一个HashMap集合,存储三个键值对元素,每一个键值对元素的键是String,值是ArrayList

每一个ArrayList的元素是String,并遍历

代码实现:

public class HashMapIncludeArrayListDemo { 
    public static void main(String[] args) { 
        //创建HashMap集合 
        HashMap<String, ArrayList<String>> hm = new HashMap<String,ArrayList<String>>(); 
        //创建ArrayList集合,并添加元素 
        ArrayList<String> sgyy = new ArrayList<String>(); 
        sgyy.add("诸葛亮"); 
        sgyy.add("赵云"); 
        //把ArrayList作为元素添加到HashMap集合 
        hm.put("三国演义",sgyy); 
        ArrayList<String> xyj = new ArrayList<String>(); 
        xyj.add("唐僧"); 
        xyj.add("孙悟空"); 
        //把ArrayList作为元素添加到HashMap集合 
        hm.put("西游记",xyj);
        ArrayList<String> shz = new ArrayList<String>(); 
        shz.add("武松"); 
        shz.add("鲁智深"); 
        //把ArrayList作为元素添加到HashMap集合 
        hm.put("水浒传",shz); 
        //遍历HashMap集合 
        Set<String> keySet = hm.keySet(); 
        for(String key : keySet) { 
            System.out.println(key); 
            ArrayList<String> value = hm.get(key); 
            for(String s : value) { 
                System.out.println("\t" + s); 
            } 
        } 
    } 
}

image.gif

五、统计字符串中每个字符出现的次数

需求:

键盘录入一个字符串,要求统计字符串中每个字符串出现的次数

举例:键盘录入"aababbccdeffeeda",在控制台输出:"a(4)b()c(2)d(2)e(3)f(2)"

代码实现:

public class HashMapDemo { 
    public static void main(String[] args) { 
        //键盘录入一个字符串 
        Scanner sc = new Scanner(System.in); 
        System.out.println("请输入一个字符串:"); 
        String line = sc.nextLine(); 
        //创建HashMap集合,键是Character,值是Integer 
//         HashMap<Character, Integer> hm = new HashMap<Character, Integer>(); 
        TreeMap<Character, Integer> hm = new TreeMap<Character, Integer>(); 
        //遍历字符串,得到每一个字符 
        for (int i = 0; i < line.length(); i++) { 
            char key = line.charAt(i); 
            //拿得到的每一个字符作为键到HashMap集合中去找对应的值,看其返回值 
            Integer value = hm.get(key); 
            if (value == null) { 
                //如果返回值是null:说明该字符在HashMap集合中不存在,就把该字符作为键,1作为值存储 
                hm.put(key,1); 
            } else { 
                //如果返回值不是null:说明该字符在HashMap集合中存在,把该值加1,然后重新存储该字符和对应的值
                value++; 
                hm.put(key,value);
            } 
        }
        //遍历HashMap集合,得到键和值,按照要求进行拼接 
        StringBuilder sb = new StringBuilder(); 
        Set<Character> keySet = hm.keySet(); 
        for(Character key : keySet) { 
            Integer value = hm.get(key); 
            sb.append(key).append("(").append(value).append(")"); 
        }
        String result = sb.toString(); 
        //输出结果 
        System.out.println(result); 
    } 
}

image.gif

目录
相关文章
|
6天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
28 3
|
23天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
40 5
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
45 4
|
2月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
37 2
|
2月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
5月前
|
存储 安全 Java
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
这篇文章是关于Java面试的第二天笔记,涵盖了HashMap与HashTable的区别、ConcurrentHashMap的实现原理、IOC容器的实现方法、字节码的概念和作用、Java类加载器的类型、双亲委派模型、Java异常体系、GC如何判断对象可回收、线程的生命周期及状态,以及sleep、wait、join、yield的区别等十道面试题。
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
|
5月前
|
安全 Java
【Java集合类面试十五】、说一说HashMap和HashTable的区别
HashMap和Hashtable的主要区别在于Hashtable是线程安全的,不允许null键和值,而HashMap是非线程安全的,允许null键和值。
|
存储 安全 Java
java学会这些,我就入门啦!(基础篇六)HashMap、Hashtable、ConcurrentHashMap的原理与区别
java学会这些,我就入门啦!(基础篇六)HashMap、Hashtable、ConcurrentHashMap的原理与区别
|
8月前
|
存储 安全 Java
Java集合框架:HashMap和HashTable的区别是什么?
Java集合框架:HashMap和HashTable的区别是什么?
49 0
|
存储 安全 Java
Java中HashMap和Hashtable的区别
Java中HashMap和Hashtable的区别