JAVA HashMap案例(HashMap集合存储学生对象并遍历)

  1. 案例:HashMap集合存储学生对象并遍历
    需求:创建一个HashMap集合,键是学号(String),值是学生对象(Student)。存储三个键值对元素,并遍历。
    分析:
    (1)定义学生类;
    (2)创建HashMap集合对象;
    (3)创建学生对象;
    (4)把学生添加到集合;
    (5)遍历集合(键找值、键值对对象找键和值)
    完整代码:
package com.xuexi;

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

package com.xuexi;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo6 {
    public static void main(String[] args) {
        //创建Map集合对象
        Map<String,Student> map = new HashMap<String, Student>();

        //创建学生对象
        Student s1 = new Student("Tom",9);
        Student s2 = new Student("Tim",19);
        Student s3 = new Student("Bob",91);

        //添加学生到集合
        map.put("001",s1);
        map.put("002",s2);
        map.put("003",s3);

        //方式一:找键值
        Set<String> keySet = map.keySet();
        for (String key : keySet){
            Student value = map.get(key);
            System.out.println(key+','+value.getName()+','+value.getAge());
        }
        System.out.println("---------");

        //方式二:键值对找键值
        Set<Map.Entry<String, Student>> entrySet = map.entrySet();
        for (Map.Entry<String, Student> me : entrySet){
            String key = me.getKey();
            Student value = me.getValue();
            System.out.println(key+','+value.getName()+','+value.getAge());
        }
    }
}

运行结果:

001,Tom,9
002,Tim,19
003,Bob,91
---------
001,Tom,9
002,Tim,19
003,Bob,91
  1. 案例:HashMap集合存储学生对象并遍历
    需求:创建一个HashMap集合,键是学生对象(Student),值是居住地(String)。存储多个键值对元素,并遍历。
    要求保证键的唯一性,如果学生对象的成员变量值相同,认为是同一个对象
    分析:
    (1)定义学生类;
    (2)创建HashMap集合对象;
    (3)创建学生对象;
    (4)把学生添加到集合;
    (5)遍历集合;
    (6)在学生类中重写两个方法:hashCode()、equals().
    完整代码:
package com.xuexi;

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

package com.xuexi;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo7 {
    public static void main(String[] args) {
        //创建Map集合对象
        Map<Student,String> map = new HashMap<Student, String>();

        //创建学生对象
        Student s1 = new Student("Tom",9);
        Student s2 = new Student("Tim",19);
        Student s3 = new Student("Bob",91);
        Student s4 = new Student("Bob",91);

        //把学生添加到集合
        map.put(s1,"UK");
        map.put(s2,"CN");
        map.put(s3,"UN");
        map.put(s4,"Ja");

        //遍历
        Set<Student> keySet = map.keySet();
        for (Student key : keySet){
            String value = map.get(key);
            System.out.println(key.getName()+','+key.getAge()+','+value);
        }

    }
}

运行结果:

Tom,9,UK
Bob,91,Ja
Tim,19,CN
  1. 案例:ArrayList集合存储HashMap元素并遍历
    需求:创建一个ArrayList集合,存储三个元素,每一个元素都是HashMap,每一个HashMap的键和值都是String,并遍历。
    分析:
    (1)创建ArrayList集合;
    (2)创建HashMap集合,并添加键值对元素;
    (3)把HashMap作为元素添加到ArrayList集合;
    (4)遍历ArrayList集合。
    完整代码:
package com.xuexi;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

public class Demo8 {
    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("aaa","AAA");
        hm1.put("bbb","BBB");
        //把HashMap作为元素添加到ArrayList集合
        array.add(hm1);

        HashMap<String,String> hm2 = new HashMap<String,String>();
        hm2.put("ccc","CCC");
        hm2.put("ddd","DDD");
        //把HashMap作为元素添加到ArrayList集合
        array.add(hm2);

        HashMap<String,String> hm3 = new HashMap<String,String>();
        hm3.put("eee","EEE");
        hm3.put("fff","FFF");
        //把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);
            }
        }
    }
}

运行结果:

aaa,AAA
bbb,BBB
ccc,CCC
ddd,DDD
eee,EEE
fff,FFF
  1. 案例:HashMap集合存储ArrayList元素并遍历
    需求:创建一个HashMap集合,存储三个键值对元素,每一个键值对元素的键是String,值是ArrayList,每一个ArrayList的元素是String,并遍历。
    分析:
    (1)创建HashMap集合;
    (2)创建ArrayList集合,并添加键值对元素;
    (3)把ArrayList作为元素添加到HashMap集合;
    (4)遍历HashMap集合。
    完整代码:
package com.xuexi;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

public class Demo9 {
    public static void main(String[] args) {
        //创建HashMap集合
        HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();

        //创建ArrayList集合,并添加元素
        ArrayList<String> arrayList1 = new ArrayList<String>();
        arrayList1.add("AAA");
        arrayList1.add("DDD");
        //把ArrayList作为元素添加到HashMap集合
        map.put("ad",arrayList1);

        //创建ArrayList集合,并添加元素
        ArrayList<String> arrayList2 = new ArrayList<String>();
        arrayList2.add("BBB");
        arrayList2.add("EEE");
        //把ArrayList作为元素添加到HashMap集合
        map.put("be",arrayList2);

        //创建ArrayList集合,并添加元素
        ArrayList<String> arrayList3 = new ArrayList<String>();
        arrayList3.add("CCC");
        arrayList3.add("FFF");
        //把ArrayList作为元素添加到HashMap集合
        map.put("cf",arrayList3);

        //遍历HashMap集合
        Set<String> keySet = map.keySet();
        for (String key : keySet){
            System.out.println(key);
            ArrayList<String> value = map.get(key);
            for (String s : value){
                System.out.println("\t"+s);
            }
        }
    }
}

运行结果:

ad
	AAA
	DDD
be
	BBB
	EEE
cf
	CCC
	FFF

Process finished with exit code 0

  1. 案例:统计字符串中每个字符出现的次数
    需求:键盘录入一个字符串,要求统计字符串中每个字符串出现的次数。
    举例:键盘录入:“aababcabcdabcde"
    在控制台输出:“a(5)b(4)c(3)d(2)e(1)”
    分析:
    (1)我们可以把结果分为几个部分来看:a(5),b(4),c(3),d(2),e(1);
    (2)每一个部分可以看成是:字符和字符对应的次数组成;
    (3)这样的数据,可以通过HashMap集合来存储,键是字符,值是字符出现的次数。
    注:键是字符,类型应该是Character;值是字符出现的次数,类型应该是Integer.
    思路:
    (1)键盘录入一个字符串;
    (2)创建HashMap集合,键是Character,值是Integer;
    (3)遍历字符串,得到每一个字符;
    (4)拿得到的每一个字符作为键得到HashMap集合中去找对应的值,看其返回值:
    如果是返回值是null,说明该字符在HashMap集合中不存在,就把该字符作为键,1作为值存储;
    如果是返回值不是null,说明该字符在HashMap集合中存在,把该值加1,然后重新存储该字符和对应的值;
    (5)遍历HashMap集合,得到键和值,按照要求进行拼接;
    (6)输出结果。
    完整代码:
package com.xuexi;

import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class Demo10 {
    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);

    }
}

运行结果:

请输入一个字符串
aababcabcdabcde
a(5)b(4)c(3)d(2)e(1)
  • 17
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值