【Java SE 代码回顾】——day06_HashMap、HashSet、增强for循环

简介: 【Java SE 代码回顾】——day06_HashMap、HashSet、增强for循环

这个系列是对javaSE课程代码的回顾,所有Demo都是亲自动手实现的,并做了小小的change,为了方便自己理解和后期复习,代码里加了大量的注释。现对所有知识点的代码进行复习整理,进一步理解、完善代码,对注释进行补充。其中重要的知识点会单独说明,但主要以代码为主。


说明:博客是对学习内容的巩固,很多注释是为了自己理解,所以不会很专业。

------------------------------------------------------HashMap------------------------------------------------

package cn.tjpu.javase06.HashMap;
/**
 * HashMap用法
 */
import java.util.HashMap;
public class HashMapDemo {
    public static void main(String[] args) {
      //创建一个HashMap
      HashMap<String,String> map=new HashMap<>();
      //向map中添加数据(键值,值)
      map.put("1", "牛奶");
      map.put("2", "面包");
      map.put("3", "可乐");
      //通过键值拿到map中的某个值
      String a=map.get("1");
      System.out.println(a);
      //打印HashMap长度
      int size=map.size();
      System.out.println(size);
      //通过键值移除数据
      String c=map.remove("2");
      System.out.println(c);
      //验证是否移除数据
      //1.再次获取数据
      //String d=map.get("2");
      //System.out.println(d);
      //2.用containsKey()方法验证,被移除返回布尔值false
      boolean e=map.containsKey("1");
      System.out.println(e);
    }
}
package cn.tjpu.javase06.HashMap;
/**
 * 利用hashmap找重复商品并按如下方式打印:
 * 2,4,5-->香蕉
 * 1,3-->牛奶
 * 6-->橘子 
 */
import java.util.HashMap;
import java.util.Set;
import cn.tjpu.javase05.shop.Product;
public class HashMapTest {
  public static void main(String[] args) {
    // 造几个商品并放入HashMap中(产品id作为键值,产品对象作为值)
    Product p1 = new Product("1", "牛奶", 2.1f, 1);
    Product p2 = new Product("2", "香蕉", 2.2f, 2);
    Product p3 = new Product("3", "牛奶", 2.1f, 3);
    Product p4 = new Product("4", "香蕉", 2.2f, 4);
    Product p5 = new Product("5", "香蕉", 2.2f, 5);
    Product p6 = new Product("6", "橘子", 2.3f, 6);
    HashMap<String, Product> pdtMap = new HashMap<>();
    pdtMap.put(p1.getPId(), p1);
    pdtMap.put(p2.getPId(), p2);
    pdtMap.put(p3.getPId(), p3);
    pdtMap.put(p4.getPId(), p4);
    pdtMap.put(p5.getPId(), p5);
    pdtMap.put(p6.getPId(), p6);
    /*
     * 找出hashmap中产品名称重复的数据,并打印出发生了重复的数据产品id
     */
    // 构造一个新的hashmap(newMap)
    HashMap<String, String> newMap = new HashMap<>();
    // 取出map中的所有键值(id),放入一个集合
    Set<String> keySet = pdtMap.keySet();
    // 遍历这个键值集合
    for (String id : keySet) {
      // 通过键值拿到id的产品对象
      Product p = pdtMap.get(id);
      // 然后判断,这个product对象的name在新hashmap是否存在
      if (newMap.containsKey(p.getPName())) {
        // 如果已存在,则将之前的id拼上这个product的id作为value覆盖进去
        String pid = newMap.get(p.getPName());// 从新的map中取出已存在的产品id
        // 新map中(键值是名字,值是重复商品的id)
        newMap.put(p.getPName(), pid + "," + p.getPId());// 将新map中的产品id拼上这次从老map中取出的产品的id
      } else {
        // 如果尚不存在,则将这个product对象的name作为key,id作为value放入新的hashmap中
        newMap.put(p.getPName(), p.getPId());
      }
    }
    // 遍历新map并打印
    Set<String> keySet2 = newMap.keySet();
    for (String name : keySet2) {
      String ids = newMap.get(name);
      System.out.println(ids + "-->" + name);
    }
    /**
     * hashmap调用keyset()方法才能遍历 hashmap对象get(键值)-->返回value值
     */
  }
}
package cn.tjpu.javase06.HashMap;
/**
 * 利用Hashmap统计每个字母出现的次数
 * 字符串 "a,b,c,d,e,f,g,h,b,b,b,c,x,x,y,x,b"
 * 结果打印如下:
  a,1
  b,5
  c,2
 */
import java.util.HashMap;
import java.util.Set;
public class HashMapCountWord {
  public static void main(String[] args) {
    String str = "a,b,c,d,e,f,g,h,b,b,b,c,x,x,y,x,b";
    // 将字符串按逗号切割然后存入字符串数组
    String[] s1 = str.split(",");
    // 建一个hashmap,用来存放字母及其对应出现次数
    HashMap<String, Integer> count = new HashMap<>();
    // 增强循环,遍历数组中的字母
    for (String ch : s1) {
      // 判断hashmap中的键值中是否包括数组中的字母
      if (count.containsKey(ch)) {
        // 如果字母已存在,通过键值,拿到其值(字母出现次数)
        Integer c = count.get(ch);
        // 将次数+1再把键值和值放回hashmap中
        count.put(ch, c + 1);
      } else {
        // 如果数组中某个字母还没在hashmap中,就把字母和它目前出现的次数1放入map中
        count.put(ch, 1);
      }
    }
    /**
     * 遍历hashmap,打印数据
     */
    // 先取出所有的key存入一个集合
    Set<String> keyset = count.keySet();
    // 然后遍历集合中一个一个的key,从map中取value
    for (String key : keyset) {
      Integer vaule = count.get(key);
      System.out.println(key + "," + vaule);
    }
  }
}

------------------------------------------------------HashSet------------------------------------------------

package cn.tjpu.javase06.HashMap;
/**
 * HashSet的用法
 */
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import cn.tjpu.javase05.shop.Product;
public class HashSetDemo {
  public static void main(String[] args) {
    // 创建一个HashSet(集合中的值唯一)
    HashSet<String> set = new HashSet<>();
    // 添加数据
    set.add("牛奶");
    set.add("面包");
    set.add("火腿");
    set.add("可乐");
    set.add("巧克力");
    set.add("可乐");
    // 获取set长度
    int a = set.size();
    System.out.println(a);
    // 移除元素
    set.remove("可乐");
    System.out.println(set.size());
    // 遍历set集合,用迭代器来获取数据
    Iterator<String> iterator = set.iterator();
    // hasNext()方法是用来下移“数据指针”,并判断是否还有数据
    while (iterator.hasNext()) {
      // next()是取当前“数据指针”上的数据
      System.out.println(iterator.next());
    }
    System.out.println("---------------------");
    // set增强for循环
    for (String tmp : set) {
      System.out.println(tmp);
    }
    // String[]增强for循环
    String[] arr = new String[] { "3", "4", "5", "7" };
    for (String ar : arr) {
      System.out.println(ar);
    }
    // ArrayList增强for循环
    ArrayList<Product> prdts = new ArrayList<Product>();
    prdts.add(new Product("001", "牛奶", 3.5f, 6));
    prdts.add(new Product("002", "牛", 3.5f, 2));
    prdts.add(new Product("003", "奶", 3.5f, 9));
    for (Product p : prdts) {
      System.out.println(p);
    }
  }
}
package cn.tjpu.javase06.HashMap;
import java.util.HashSet;
/**
 * 将字符串 "a,b,c,d,e,f,g,h,b,b,b,c,x,x,y,x,b"中的字母去重,打印: abcdefghxy
 */
public class HashSetTest {
  public static void main(String[] args) {
    String str = "a,b,c,d,e,f,g,h,b,b,b,c,x,x,y,x,b";
    // 字符串切割放入数组
    String[] s1 = str.split(",");
    HashSet<String> set = new HashSet<>();
    // 利用set添加相同值就会覆盖原有值的特性
    for (String ch : s1) {
      set.add(ch);
    }
    // 打印
    for (String ch : set) {
      System.out.print(ch);
    }
  }
}
相关文章
|
1月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
66 1
|
1月前
|
Java
Java之HashMap详解
本文介绍了Java中HashMap的源码实现(基于JDK 1.8)。HashMap是基于哈希表的Map接口实现,允许空值和空键,不同步且线程不安全。文章详细解析了HashMap的数据结构、主要方法(如初始化、put、get、resize等)的实现,以及树化和反树化的机制。此外,还对比了JDK 7和JDK 8中HashMap的主要差异,并提供了使用HashMap时的一些注意事项。
Java之HashMap详解
|
9天前
|
Java
Java之for循环
Java 提供了三种 for 循环方式:fori、foreach 和 Stream.foreach。fori 是最早的循环形式,现已较少使用;foreach 是对 fori 的语法糖,编译时会自动转换;Stream.foreach 结合 lambda 表达式使用,代码更简洁,但不支持 break 和 return。
51 11
Java之for循环
|
1月前
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
87 38
|
4天前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
20 3
|
29天前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
52 24
|
11天前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
49 2
|
1月前
|
Java 程序员 API
Java循环操作哪个快?
本文探讨了Java中stream API与传统for循环在性能上的对比,通过多个示例分析了不同场景下两者的优劣。作者指出,尽管stream API使代码更简洁,但不当使用会降低可读性和性能,特别是在处理大数据量时。实验结果显示,在多数情况下,普通for循环的性能优于stream API,尤其是在单次操作耗时较短但需多次执行的场景中。文章建议开发者在设计初期就考虑全局流程,避免重复使用stream流,以提升代码质量和性能。
Java循环操作哪个快?
|
1月前
|
Java 程序员 API
Java循环操作哪个快?
本文探讨了Java中Stream API与传统for循环的性能对比及适用场景。作者通过实际案例分析,指出在某些情况下,过度使用Stream API会导致代码可读性和维护性下降。测试结果显示,在数据量较小的情况下,普通for循环的性能优于Stream API,尤其是在涉及多次类似操作时。因此,建议在开发中根据具体需求选择合适的遍历方式,以提高代码的可读性和性能。
Java循环操作哪个快?
|
25天前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
66 5