这个系列是对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); } } }