文章目录
- 一、集合概念
- 二、map集合
- 1、Map集合的特点
- 2、HashMap
- 2.1 HashMap特点
- 2.2 创建对象
- 2.3 常用方法
- 2.4 遍历
- 2.4.1 使用entrySet遍历
- 2.4.2 使用keySet遍历
- 3、HashMap的key去重原理
一、集合概念
- 集合就是用于存储多个数据的容器。相对于具有相同功能的数组来说,集合的长度可变会更加灵活方便。
- 集合主要有两个顶层接口,Collection和Map。
二、map集合
1、Map集合的特点
Map接口是双列集合的顶层接口,下面是Map接口的定义
interface Map<K,V> K:键的类型;V:值的类型
- 存储的数据必须包含key和value。
- key和value在Map集合中是一一对应的关系。一个key对应一个value。
- key在map集合中是不会重复的。
2、HashMap
2.1 HashMap特点
- 底层数据结构是哈希表
- 存储元素的顺序和遍历获取出来的顺序可能不一致
- key不会重复
2.2 创建对象
HashMap<key的数据类型,value的数据类型> map = new HashMap<>();
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
HashMap<String,Integer> map = new HashMap<>();
}
2.3 常用方法
- V put(K key, V value) //添加元素,如果key不存在就添加,如果key已经存在则是修改对应的value,并且返回修改前的value
- V get(Object key) //根据key获取对应的value值返回。如果key不存在就返回null
- V remove(Object key) //根据key删除map中对应的键值对。并且把删除的value返回
- boolean containsKey(Object key) //判断key是否存在
- int size() //集合中键值对的对数
- void clear() //清空集合中的所有键值对
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
//map.put()
//添加元素
map.put("name", "三更");
map.put("age", "15");
String v = map.put("name", "三更草堂");
String name = map.get("name");
String age = map.get("age");
//删除元素
String delV = map.remove("age");
//判断key是否存在
if(map.containsKey("name")){
String age111 = map.get("name");//null
System.out.println(age111.length());
}
//size
int size = map.size();
map.clear();
}
2.4 遍历
2.4.1 使用entrySet遍历
map集合的entrySet方法可以获取一个Set集合,集合中存放的是Entry对象,一个Entry对象相当于一个键值对。我们可以遍历set集合拿到Entry对象,然后获取出里面的键和值。
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
map.put("name","三更");
map.put("age","15");
Set<Map.Entry<String, String>> entries = map.entrySet();
//使用迭代器遍历entrySet
Iterator<Map.Entry<String, String>> it = entries.iterator();
while (it.hasNext()){
Map.Entry<String, String> entry = it.next();
System.out.println(entry.getKey()+"===="+entry.getValue());
}
}
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
map.put("name","三更");
map.put("age","15");
Set<Map.Entry<String, String>> entries = map.entrySet();
//使用foreach遍历entrySet
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry.getKey()+"===="+entry.getValue());
}
}
2.4.2 使用keySet遍历
map集合的keySet方法可以获取一个Set集合,集合中存放的是所有的key。我们可以遍历set集合拿到key对象,然后通过key获取对应的value。
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
map.put("name","三更");
map.put("age","15");
Set<String> keys = map.keySet();
for (String key : keys) {
System.out.println(key+"===="+map.get(key));
}
}
3、HashMap的key去重原理
- HashMap在添加元素的时候会判断集合中是否有key和本次存入的key相同。判断的时候主要是通过hashCode方法和equals方法来进行判断的。hashCode相同,并且equals判断也相同就会认为是同一个key。
- Alt + insert 重写hashCode方法和equals方法
注意:HashSet存储数据其实也是使用了HashMap。所以如果往HashSet中存储自定义对象也要看情况是否需要重写hashCode方法和equals方法。