订单费用分段计算的有序集合的应用,TreeMap
订单费用分段计算的有序集合的应用,TreeMap
1.TreeMap key是有序的。
package com.example.core.mydemo.java3; import java.util.TreeMap; public class TreeMapDemo { public static void main(String[] args) { // 创建一个 TreeMap TreeMap<String, Integer> map = new TreeMap<>(); // 向 TreeMap 中添加键值对 map.put("Charlie", 70); map.put("David", 60); map.put("Alice", 90); map.put("Bob", 80); // 打印 TreeMap 的内容 System.out.println(map); // {Alice=90, Bob=80, Charlie=70, David=60} // 根据键获取对应的值 System.out.println(map.get("Alice")); // 90 System.out.println(map.get("Eve")); // null // 根据键删除对应的键值对 map.remove("Bob"); System.out.println(map); // {Alice=90, Charlie=70, David=60} // 获取 TreeMap 中的键值对的数量 System.out.println(map.size()); // 3 // 判断 TreeMap 中是否包含某个键 System.out.println(map.containsKey("Charlie")); // true System.out.println(map.containsKey("Eve")); // false // 判断 TreeMap 中是否包含某个值 System.out.println(map.containsValue(70)); // true System.out.println(map.containsValue(50)); // false // 清空 TreeMap 中的所有键值对 map.clear(); System.out.println(map); // {} } }
2.TreeMap 相关联的操作使用,应用比如按不同的租期天数来取不同的折扣来计算费用。
insuranceMap={4=1.0, 7=0.8, 14=0.5, 28=0.5, 999999=0.2}
1-4天按不打折
4-7天打8折
7到14天到5折
14天28天打5折
28天以上打2折
package com.example.core.mydemo.java3; import java.util.TreeMap; public class TreeMapDemo2 { public static void main(String[] args) { // 创建一个 TreeMap TreeMap<String, Integer> map = new TreeMap<>(); // 向 TreeMap 中添加键值对 map.put("Alice", 90); map.put("Bob", 80); map.put("Charlie", 70); map.put("David", 60); // 打印 TreeMap 的内容 System.out.println(map); // {Alice=90, Bob=80, Charlie=70, David=60} // 返回 TreeMap 中最小和最大的键 System.out.println(map.firstKey()); // Alice System.out.println(map.lastKey()); // David // 返回 TreeMap 中小于和大于给定键的最近的键 System.out.println(map.lowerKey("Bob")); // Alice System.out.println(map.higherKey("Bob")); // Charlie // 返回 TreeMap 中小于等于和大于等于给定键的最近的键 System.out.println(map.floorKey("Bob")); // Bob System.out.println(map.ceilingKey("Bob")); // Bob // 返回一个子映射,包含给定范围内的所有键值对 System.out.println(map.subMap("Alice", true, "Charlie", true)); // {Alice=90, Bob=80, Charlie=70} // 返回一个子映射,包含小于或等于给定键或大于或等于给定键的所有键值对 System.out.println(map.headMap("Charlie", true)); // {Alice=90, Bob=80, Charlie=70} System.out.println(map.tailMap("Charlie", true)); // {Charlie=70, David=60} // 返回 TreeMap 中最小和最大的键值对 System.out.println(map.firstEntry()); // Alice=90 System.out.println(map.lastEntry()); // David=60 // 返回 TreeMap 中小于和大于给定键的最近的键值对 System.out.println(map.lowerEntry("Bob")); // Alice=90 System.out.println(map.higherEntry("Bob")); // Charlie=70 // 返回 TreeMap 中小于等于和大于等于给定键的最近的键值对 System.out.println(map.floorEntry("Bob")); // Bob=80 System.out.println(map.ceilingEntry("Bob")); // Bob=80 // 返回并删除 TreeMap 中最小和最大的键值对 System.out.println(map.pollFirstEntry()); // Alice=90 System.out.println(map.pollLastEntry()); // David=60 System.out.println(map); // {Bob=80, Charlie=70} } }
3.TreeMap应用,数据签名排序等规则使用,按首字母升序来处理
package com.example.core.mydemo.java3; import java.util.Map; import java.util.StringTokenizer; import java.util.TreeMap; /** * TreeMap应用,数据签名排序等规则使用,按首字母升序来处理 * output: * {platenum=沪A00250, sign=1d1b3befd94733a943720f7d3c2fa4a3} * dataMap={orderNo=1111222333, status=1} * dataMap2={orderNo=2111222333, status=2} */ public class TreeMapTest { public static void main(String[] args) { String ss = "platenum=沪A00250&sign=1d1b3befd94733a943720f7d3c2fa4a3"; System.out.println(parseFormParams(ss)); Map<String, Object> dataMap = new TreeMap<>(); //有序 dataMap.put("orderNo","1111222333"); dataMap.put("status","1"); Map<String, Object> dataMap2 = new TreeMap<>(); //有序 dataMap2.put("status","2"); dataMap2.put("orderNo","2111222333"); System.out.println("dataMap="+dataMap); System.out.println("dataMap2="+dataMap2); } public static Map<String,Object> parseFormParams(String reqContent){//platenum=沪A00250&sign=1d1b3befd94733a943720f7d3c2fa4a3 Map<String,Object> map = new TreeMap<>(); StringTokenizer st = new StringTokenizer(reqContent,"&"); while(st.hasMoreTokens()){ String param = st.nextToken(); int idx = param.indexOf("="); String key = param.substring(0,idx); String val = param.substring(idx+1); map.put(key, val); } return map; } }