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

目录
打赏
0
0
0
0
32
分享
相关文章
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
77 3
|
16天前
|
Java LinkedList集合的深度剖析
总的来说,我希望像说故事一样讲解Java LinkedList集合的使用和实现原理,让有些许枯燥的编程知识变得趣味盎然。在这个“公交车”故事中,你不仅熟悉了LinkedList集合的实现和使用,而且还更深入地理解了数据结构中的链表。链表可能会因为插入和删除的便利性而被选用,虽然它的查找效率并不高,但是在很多场景中仍然十分有效。这就像公交车,虽然它速度不快,但却是城市出行的重要工具。
43 8
Java 字符串详解
本文介绍了 Java 中的三种字符串类型:String、StringBuffer 和 StringBuilder,详细讲解了它们的区别与使用场景。String 是不可变的字符串常量,线程安全但操作效率较低;StringBuffer 是可变的字符串缓冲区,线程安全但性能稍逊;StringBuilder 同样是可变的字符串缓冲区,但非线程安全,性能更高。文章还列举了三者的常用方法,并总结了它们在不同环境下的适用情况及执行速度对比。
69 17
Java字符串缓冲区
字符串缓冲区是用于处理可变字符串的容器,Java中提供了`StringBuffer`和`StringBuilder`两种实现。由于`String`类不可变,当需要频繁修改字符串时,使用缓冲区更高效。`StringBuffer`是一个线程安全的容器,支持动态扩展、任意类型数据转为字符串存储,并提供多种操作方法(如`append`、`insert`、`delete`等)。通过这些方法,可以方便地对字符串进行添加、插入、删除等操作,最终将结果转换为字符串。示例代码展示了如何创建缓冲区对象并调用相关方法完成字符串操作。
51 13
Java HashMap详解及实现原理
Java HashMap是Java集合框架中常用的Map接口实现,基于哈希表结构,允许null键和值,提供高效的存取操作。它通过哈希函数将键映射到数组索引,并使用链表或红黑树解决哈希冲突。HashMap非线程安全,多线程环境下需注意并发问题,常用解决方案包括ConcurrentHashMap和Collections.synchronizedMap()。此外,合理设置初始化容量和加载因子、重写hashCode()和equals()方法有助于提高性能和避免哈希冲突。
100 17
Java HashMap详解及实现原理
|
10天前
|
Java 集合框架详解:系统化分析与高级应用
本文深入解析Java集合框架,涵盖List、Set、Map等核心接口及其常见实现类,如ArrayList、HashSet、HashMap等。通过对比不同集合类型的特性与应用场景,帮助开发者选择最优方案。同时介绍Iterator迭代机制、Collections工具类及Stream API等高级功能,提升代码效率与可维护性。适合初学者与进阶开发者系统学习与实践。
36 0
|
30天前
|
java常见的集合类有哪些
Map接口和Collection接口是所有集合框架的父接口: 1. Collection接口的子接口包括:Set接口和List接口 2. Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及 Properties等 3. Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等 4. List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等
|
3月前
|
java怎么统计每个项目下的每个类别的数据
通过本文,我们详细介绍了如何在Java中统计每个项目下的每个类别的数据,包括数据模型设计、数据存储和统计方法。通过定义 `Category`和 `Project`类,并使用 `ProjectManager`类进行管理,可以轻松实现项目和类别的数据统计。希望本文能够帮助您理解和实现类似的统计需求。
145 17
两种方式实现一个「扁平化嵌套列表迭代器」|Java 刷题打卡
两种方式实现一个「扁平化嵌套列表迭代器」|Java 刷题打卡
|
2月前
|
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
196 60
【Java并发】【线程池】带你从0-1入门线程池

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等