IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【Java基础】HashMap集合案例、集合嵌套及统计字符串每个字符出现的次数 -> 正文阅读

[数据结构与算法]【Java基础】HashMap集合案例、集合嵌套及统计字符串每个字符出现的次数

目录

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

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

三、集合嵌套:ArrayList嵌套HashMap

四、集合嵌套:HashMap嵌套ArrayList

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


一、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;
    }
}

测试类:

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()); 
        } 
    } 
}

二、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; 
    } 
}

测试类:

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); 
        } 
    } 
}

三、集合嵌套: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); 
            } 
        } 
    } 
}

四、集合嵌套: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); 
            } 
        } 
    } 
}

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

需求:

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

举例:键盘录入"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); 
    } 
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:43:26  更:2022-09-13 11:46:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 13:10:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码