这是前天遇到的一个面试题:
=== 字典序列列化 ===
我们程序中⽤用到了了⼀一个数组 a ,数组的每个元素都是⼀一个字典(map/dict)。
字典的 key/value 都是字符串串,字符串串中可包含任意字符。
示例例:
a[0][\"k1\"] = \"v1\"
a[0][\"k2\"] = \"v2\"
a[1][\"A\"] = \"XXX\"
...
实际使⽤用过程中,我们⾃自定义了了⼀一个基于字符串串的存储结构,数组元素之间⽤用“换⾏行行”分割,
字典元素之间使⽤用“分号”分割, key/value 之间⽤用“等号”分割。
上述数据序列列化之后,应该得到⼀一个字符串串:
\"k1=v1;k2=v2\\nA=XXX\"
请实现⼀一个“保存”函数、⼀一个“加载”函数。
text = store(a); //把数组保存到⼀一个字符串串中
a = load(text); //把字符串串中的内容读取为字典数组
请考虑所有边界情况,不不要出现bug。在满⾜足上述需求的前提下,可⾃自⾏行行增加⼀一些规则和约
定。
保存方法:
public String getString(List<Map<String,String>> list) {
String str = \"\";
for (Map<String, String> map : list) {
Set<Entry<String,String>> entrySet = map.entrySet();
for (Entry<String, String> entry : entrySet) {
String key = entry.getKey();
String value = entry.getValue();
str+=(key+\"=\"+value+\";\");
}
str = str.substring(0, str.length()-1);
str = str+\"\\\\n\";
}
str = str.substring(0, str.length()-2);
return str;
}
格式化方法
public List<Map<String,String>> load(String string){
String[] split = string.split(\"\\\\\\\\n\");
List<Map<String,String>> list = new ArrayList<>();
for (String string2 : split) {
String[] split2 = string2.split(\";\");
Map<String,String> map= new HashMap<>();
for (String string3 : split2) {
String[] split3 = string3.split(\"=\");
map.put(split3[0],split3[1]);
}
list.add(map);
}
return list;
}
测试方法
List<Map<String,String>> list = new ArrayList<>();
Map<String,String> map = new HashMap<>();
map.put(\"k1\", \"v1\");
map.put(\"k2\", \"v2\");
Map<String,String> map2 = new HashMap<>();
map2.put(\"z1\", \"zv1\");
map2.put(\"z2\", \"zv2\");
list.add(map);
list.add(map2);
test tt = new test();
String formate = tt.getString(list);
System.out.println(\"序列化参数---------->\"+formate);
List<Map<String,String>> load = tt.load(formate);
System.out.println(\"参数加载---------->\"+load.toString());
测试结果
序列化参数---------->k1=v1;k2=v2\\nz1=zv1;z2=zv2
参数加载---------->[{k1=v1, k2=v2}, {z1=zv1, z2=zv2}]
各位看官如有更优解法,欢迎交流
继续阅读与本文标签相同的文章
上一篇 :
我博士科研经历中的经验和教训
下一篇 :
电力电子技术的未来:宽禁带
-
深入理解 Java 中 SPI 机制
2026-05-18栏目: 教程
-
阿里云“网红"运维工程师白金:做一个平凡的圆梦人
2026-05-18栏目: 教程
-
使用nginx部署网站
2026-05-18栏目: 教程
-
Java的四种线程池的使用,以及自定义线程工厂
2026-05-18栏目: 教程
-
Leetcode之删除排序数组中的重复项
2026-05-18栏目: 教程
