Map双列集合
1145字约4分钟
2025-09-23
HashMap
- key不可以重复,但可以为null
- key如果重复,则后面的
key-value
值会替换掉前面的key-value
- 无序(不保证与插入顺序一致)
LinkedHashMap
:有序(保证与插入顺序一致)HashMap
线程不安全HashMap
底层维护了Node
类型的数组,默认为null
- 添加元素的方式和
hashSet
相同
源码解析:0537_韩顺平Java_HMap源码解读_哔哩哔哩_bilibili
双列集合
Map map = new HashMap();
// put(Object key, Object value)
// 这里我将第一个传入的参数简写为k,第二个简写为v
// k和v可以为任何对象和值(也可以为null)
// 一般情况下k值用String来表示
map.put("1", "java");
map.put("2", "py");
map.put("1", "go");
map.put("3", "go");
map.put(1, "go");
map.put(2, 1);
// k值不能重复
// 后面的k值将替换前面的k值("1", "java"被换成"1", "go")
System.out.println(map); // {1=go, 1=go, 2=py, 2=1, 3=go}
// k相当于数组中的索引值
System.out.println(map.get("1")); // go
0531_韩顺平Java_Map接口特点2_哔哩哔哩_bilibili
常用方法
Map map = new HashMap();
// 添加
map.put("1", "java");
map.put("2", "py");
map.put("3", "app");
System.out.println(map); // {1=java, 2=py, 3=app}
删除
// 删除
// 输入对应的key值,即可删除对应的项
map.remove("1");
System.out.println(map); // {2=py, 3=app}
输出对应的关键字(value)
// 获取关键字
// 输入对应的key值,即可删除对应的项
Object name = map.get("3");
System.out.println(name); // app
获取元素数量
// 获取元素数量
System.out.println(map.size()); // 2
判断集合中是否还有数据
// 判断集合中是否还有数据
System.out.println(map.isEmpty()); // false
查找key值是否存在
// 查找key值是否存在
System.out.println(map.containsKey("3")); // true
查找Value值是否存在
// 查找Value值是否存在
System.out.println(map.containsValue("app")); // true
清除集合中的所有元素
// 清除集合中的所有元素
map.clear();
System.out.println(map); // {}
替换
Map map = new HashMap();
map.put("1", "cpp");
map.put("1", "py");
System.out.println(map); // py
三种方法遍历元素
Map map = new HashMap();
map.put("zhangsan", 19);
map.put("lisi", 20);
map.put("wangwu", 25);
// 遍历一
// 取出key值,在带入get得到values值
Set key = map.keySet();
for (Object o : key) {
System.out.println(o + " " + map.get(o));
}
// lisi 20
// zhangsan 19
// wangwu 25
// 遍历二
// 取values的值
Collection values = map.values();
for (Object o : values) {
System.out.println(o);
}
// 20
// 19
// 25
// 遍历三
// 获取k-v
Set enSet = map.entrySet();
for (Object o : enSet) {
Map.Entry e = (Map.Entry) o;
System.out.println(e.getKey() + " " + e.getValue());
}
// lisi 20
// zhangsan 19
// wangwu 25
泛型遍历
Map<String, Student1> map = new HashMap<String, Student1>();
map.put("zhangsan", new Student1("zhangsan", 18));
map.put("lisi", new Student1("lisi", 20));
for (Map.Entry<String, Student1> o : map.entrySet()) {
System.out.println(o.getKey() + " " + o.getValue());
}
// lisi name='lisi', age=20
// zhangsan name='zhangsan', age=18
HashTable
- 存放元素还是
key-value
- key和value不能为null(否则会报空指针异常)
- HashTable的使用方法基本上和HashMap一样
- HashTable的线程是安全的
HashTable和HashMap的区别
Properties
// Properties是继承HashTable的
// 所以k-v不能为空
Properties p = new Properties();
// 添加
p.put("1", "java");
p.put("2", "py");
p.put("3", "app");
// 删除
p.remove("2");
System.out.println(p); // {3=app, 1=java}
// 修改
p.put("1", "html");
// 查找,通过key值查找对应的value
System.out.println(p.get("3")); // app
System.out.println(p.getProperty("")); // app
getProperty()
更偏向于 “获取外部配置或系统级属性”,而 get()
更偏向于 “获取自定义数据结构中的值”。
TreeMap
0544_韩顺平Java_TreeMap源码解读_哔哩哔哩_bilibili
TreeMap
会提供一个构造器,用来自定义排序方法- 元素不允许重复
TreeMap t = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ((String) o2).compareTo((String) o1);
}
});
t.put("a", "app");
t.put("b", "bbcv");
t.put("b", "bbcv");
t.put("c", "cctv14");
// 自定义排序前:{a=app, b=bbcv, c=cctv14}
// 自定义排序后:{c=cctv14, b=bbcv, a=app}
System.out.println(t);
练习
集合中传入员工的信息(姓名,工资,id)
只输出工资大于10000的员工
public class HashMap05 {
public static void main(String[] args) {
Map map = new HashMap();
map.put("1", new People("zhangsan", 12000, 1));
map.put("2", new People("lisi", 8000, 2));
map.put("3", new People("wangwu", 9000, 3));
// 取key值
Set s = map.keySet();
for (Object o : s) {
// 取value值
Object i = map.get(o);
// 将Object类强转为People类
People p = (People) i;
// 判断
if (p.getMoney() > 10000) {
System.out.println(map.get(o)); // zhangsan 12000.0 1
}
}
}
}
class People {
String name;
double money;
int id;
public People(String name, double money, int id) {
this.name = name;
this.money = money;
this.id = id;
}
public double getMoney() {
return money;
}
public String toString() {
return name + " " + money + " " + id;
}
}