目录
一、HashMap集合练习:键是String值是Student
二、HashMap集合练习:键是Student值是String
需求:
创建一个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
hm = new HashMap(); -
- //创建学生对象
- 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
keySet = hm.keySet(); - for (String key : keySet) {
- Student value = hm.get(key);
- System.out.println(key + "," + value.getName() + "," + value.getAge());
- }
- System.out.println("--------");
-
- //方式二:键值对对象找键和值
- Set
> entrySet = hm.entrySet(); - for (Map.Entry
me : entrySet) { - String key = me.getKey();
- Student value = me.getValue();
- System.out.println(key + "," + value.getName() + "," + value.getAge());
- }
- }
- }
需求:
■ 创建一个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
hm = new HashMap(); -
- //创建学生对象
- 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
keySet = hm.keySet(); - for (Student key : keySet) {
- String value = hm.get(key);
- System.out.println(key.getName() + "," + key.getAge() + "," + value);
- }
- }
- }
需求:
创建一个ArrayList集合,存储三个元素,每一个元素都是HashMap
每一个HashMap的键和值都是String,并遍历
代码实现:
- public class ArrayListIncludeHashMapDemo {
- public static void main(String[] args) {
- //创建ArrayList集合
- ArrayList
> array = new ArrayList>(); -
- //创建HashMap集合,并添加键值对元素
- HashMap
hm1 = new HashMap(); - hm1.put("孙策", "大乔");
- hm1.put("周瑜", "小乔");
- //把HashMap作为元素添加到ArrayList集合
- array.add(hm1);
-
- HashMap
hm2 = new HashMap(); - hm2.put("郭靖", "黄蓉");
- hm2.put("杨过", "小龙女");
- //把HashMap作为元素添加到ArrayList集合
- array.add(hm2);
-
- HashMap
hm3 = new HashMap(); - hm3.put("令狐冲", "任盈盈");
- hm3.put("林平之", "岳灵珊");
- //把HashMap作为元素添加到ArrayList集合
- array.add(hm3);
-
- //遍历ArrayList集合
- for (HashMap
hm : array) { - Set
keySet = hm.keySet(); - for (String key : keySet) {
- String value = hm.get(key);
- System.out.println(key + "," + value);
- }
- }
- }
- }
需求:
创建一个HashMap集合,存储三个键值对元素,每一个键值对元素的键是String,值是ArrayList
每一个ArrayList的元素是String,并遍历
代码实现:
- public class HashMapIncludeArrayListDemo {
- public static void main(String[] args) {
- //创建HashMap集合
- HashMap
> hm = new HashMap>(); -
- //创建ArrayList集合,并添加元素
- ArrayList
sgyy = new ArrayList(); - sgyy.add("诸葛亮");
- sgyy.add("赵云");
- //把ArrayList作为元素添加到HashMap集合
- hm.put("三国演义",sgyy);
-
- ArrayList
xyj = new ArrayList(); - xyj.add("唐僧");
- xyj.add("孙悟空");
- //把ArrayList作为元素添加到HashMap集合
- hm.put("西游记",xyj);
-
- ArrayList
shz = new ArrayList(); - shz.add("武松");
- shz.add("鲁智深");
- //把ArrayList作为元素添加到HashMap集合
- hm.put("水浒传",shz);
-
- //遍历HashMap集合
- Set
keySet = hm.keySet(); - for(String key : keySet) {
- System.out.println(key);
- ArrayList
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
hm = new HashMap(); - TreeMap
hm = new TreeMap(); -
- //遍历字符串,得到每一个字符
- 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
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);
- }
- }