订单费用分段计算的有序集合的应用,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;
}
}