Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475
CommonsCollection6
1、前置知识
1.1、HashSet
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。继承了序列化和集合
构造函数参数为空的话创建一个HashMap(),有一个参数的情况下,要创建指定容量的初始数值的哈希集合。
我们看到add方法会调用map.put()方法。这个map就是HashMap()
//定义HashMap,E在泛型表示集合的元素,元素的类型为Object
private transient HashMap map;
......
public HashSet() {
map = new HashMap<>();
}
......
//创建初始容量为initialCapacity的HashSet,其实就是创建HashMap集合
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}
......
//往HashSet添加元素,其实就是调用HashMap的put方法添加
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
1.2、HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射,实现了Map 接口、Serializable接口
首先怎么怎么新建一个HashMap,这里就是创建一个整型(Integer)的 key 和字符串(String)类型的 value。
HashMap Sites = new HashMap();
添加键值对(key-value)的方法是put,接着上面我们添加键值对时也要传输对应的类型
Sites.put(1, "Google");
访问元素
通过get(key),获取value的值
Sites.get(1)
删除元素
使用 remove(key) 方法来删除 指定的key 对应的键值,删除所有键值
Sites.remove(1);删除指定的key对应的键值
Sites.clear();删除所有键值
计算大小
计算 HashMap 中的元素数量
Sites.size()
遍历
通过keySet()方法获取所有的key(键),也可以通过所有的valueSet(),获取所有value(键值)
//输出所有的键和键值
for (Integer i : Sites.keySet()) {
System.out.println("key: " + i + " value: " + Sites.get(i));
}
//输出所有的键值
for(String value: Sites.values()) {
// 输出每一个value
System.out.print(value + ", ");
}
1.3、debug问题
关于在调试put方法直接弹窗的解决办法。因为idea开启了自动tostring和展示集合对象
关掉改这两个选项既正常调试
2、POC利用
2.1、利用链
这次我们先看ysoseria的利用链
/*
Gadget chain:
java.io.ObjectInputStream.readObject()
java.util.HashSet.readObject()
java.util.HashMap.put()
j