【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);
    }
  }
}
相关文章
|
3月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
100 1
|
26天前
|
Java
Java快速入门之判断与循环
本文介绍了编程中的流程控制语句,主要包括顺序结构、判断结构(if语句和switch语句)以及循环结构(for、while和do...while)。通过这些语句可以精确控制程序的执行流程。if语句有三种格式,分别用于简单条件判断、二选一判断和多条件判断。switch语句适用于有限个离散值的选择判断,而循环结构则用于重复执行某段代码,其中for循环适合已知次数的情况,while循环适合未知次数但有明确结束条件的情况,do...while则是先执行后判断。文中还提供了多个示例和练习,帮助读者理解并掌握这些重要的编程概念。
|
2月前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
48 3
|
25天前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
167 11
|
2月前
|
Java
Java之for循环
Java 提供了三种 for 循环方式:fori、foreach 和 Stream.foreach。fori 是最早的循环形式,现已较少使用;foreach 是对 fori 的语法糖,编译时会自动转换;Stream.foreach 结合 lambda 表达式使用,代码更简洁,但不支持 break 和 return。
78 11
Java之for循环
|
29天前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
3月前
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
102 38
|
2月前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
68 3
|
3月前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
72 24
|
2月前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
73 2