文章目录
集合
Java 集合框架Java Collection Framework
,又被称为容器container
,是定义在 java.util
包下的一组接口interfaces
和其实现类classes
。
集合类体系结构
Set和Map集合的关系
-
纯key模型
应用: 查询某个英文单词在不在字典中 -
key-value模型
应用:统计每个单词出现的次数<单词,出现次数>
Map集合
- Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap
- Map中存放键值对的Key是唯一的,value是可以重复的.HashMap集合中
key
和value
都可以为null,但是key
为null,只能有一个. - Map中的Key可以全部分离出来,存储到Set中来进行访问(因为Key不能重复)。
- Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)。
- Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然后再来进行重新插入
TreeMap
TreeMap集合中key
不能为null,value
可以为null
HashMap
Mapt集合 | TreeMap | HashMap |
---|---|---|
底层数据结构 | 二分搜索树 | 哈希表 |
时间复杂度 | O(log2N) | O(1) |
是否有序 | 关于key有序 | 无序 |
插入删除和查找元素的区别 | 通过比较大小来进行插入和删除 | 1. 对象.hashcode()得到该对象的hash值. 2.通过hash值得到hash地址 |
比较与覆写 | key必须能够比较,否则会抛出ClassCastException异常 | 自定义类型需要覆写equals和hashCode方法 |
map中如何比较两个对象
map中比较两个对象是否相同的时候必须覆写hashcode()
和equals
方法.
-
equal
相同的两个对象,hashcode
是否相同?一定相同,
equal
相同,就是同一对象, 试想,如果hashcode()
不相同,那肯定不是同一对象,怎么可能equals()
相同 -
hashcode()
相同的两个对象,equals
是否相同?不一定相同,只能说明发生了哈希冲突.
/**
* @autor hh
* @date 2022/07/03 20:50
*/
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof Person) {
Person person = (Person) obj;
return this.age == person.age && this.name.equals(person.name);
}
return false;
}
@Override
public int hashCode() {
return 0;
}
public