JavaSE(八)
1、Map接口
1.1概述
Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。同时它也没有继承Collection。在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同。实现map的有HashMap、TreeMap、HashTable等。
1.2常用方法
put(K key,V value):添加元素
remove(Object key):根据键删除键值对元素
V get(Object key):根据键获取value值
boolean containsKey(Object key):判断集合是否包含指定的键
int size():集合长度
Set keySet():获取所有键的集合
1.3案例
package com.hg.Map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapTest {
public static void main(String[] args) {
//泛型:k,v
Map<Integer, String> map = new HashMap<>();
//添加元素
map.put(1,"仪玄");
map.put(2,"星见雅");
map.put(3,"叶瞬光");
map.put(1,"虚狩-仪玄");
//根据键获取value
String s = map.get(3);
System.out.println("map.get(3):" + s);
//获取所有键的集合
Set<Integer> keySet = map.keySet();
for (Integer key : keySet) {
System.out.println(key + "------" + map.get(key));
}
//集合长度
System.out.println("map.size():" + map.size());
//根据键值删除对应元素
map.remove(1);
System.out.println("删除后:" + map);
//判断集合是否包含指定的键
System.out.println("map.containsKey(1):" + map.containsKey(1));
}
}
2、HashMap类
2.1概述
HashMap也是一个基于哈希表的集合,用于存储键值对;
底层原理:
存储:
key.hashcode()%16计算存储位置;
该位置有数据比较key的hashcode和equals,为true则替换,为false则存到末位
扩容机制:
数组默认是16,超过0.75则扩容2倍
链表元素个数>8并且数组.length>64,则该索引位置上的链表转为红黑树

HashMap中的重要常量:

数组的扩容:

2.2案例
package com.hg.Map.HashMap;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
public class HashMapTest {
public static void main(String[] args) {
Map<String, String> map1 = new HashMap<>();
map1.put("郭靖","黄蓉");
map1.put("杨过","小龙女");
map1.put("张三丰","郭襄");
System.out.println("----------keySet------------");
Set<String> keySet = map1.keySet();
for (String key : keySet) {
System.out.println(key + "==>" + map1.get(key));
}
Map<String, String> map2 = new HashMap<>();
map2.put("萧峰","阿朱");
map2.put("段誉","王语嫣");
map2.put("虚竹","梦姑");
System.out.println("----------增强for循环------------");
Set<Map.Entry<String, String>> entrySet = map2.entrySet();
for (Map.Entry<String, String> entry : entrySet) {
System.out.println(entry.getKey() + "==>" + entry.getValue());
}
Map<String, String> map3 = new HashMap<>();
map3.put("令狐冲","任盈盈");
map3.put("岳不群","宁中则");
map3.put("林平之","岳灵珊");
System.out.println("----------iterator------------");
Set<Map.Entry<String, String>> entrySet1 = map3.entrySet();
Iterator<Map.Entry<String, String>> iterator = entrySet1.iterator();
while (iterator.hasNext()){
Map.Entry<String, String> entry = iterator.next();
System.out.println(entry.getKey() + "==>" + entry.getValue());
}
Map<String, String> map4 = new HashMap<>();
map4.put("陈平安","宁姚");
map4.put("萧炎","萧熏儿");
map4.put("林动","应欢欢");
System.out.println("----------forEach------------");
map4.forEach(new BiConsumer<String, String>() {
@Override
public void accept(String key, String value) {
System.out.println(key + "==>" + value);
}
});
}
}
3、LinkedHashMap类
3.1概述
LinkedHashMap是Map接口基于双向链表的实现,也是HashMap的子类。元素的存储和取出顺序是一致的。
HashMap中的内部类:Node

LinkedHashMap中的内部类:Entry

3.2案例
package com.hg.Map.HashMap.LinkedHashMap;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
public class LinkedHashMapTest {
public static void main(String[] args) {
//Map<String, Integer> map = new HashMap<>();
Map<String, Integer> map = new LinkedHashMap<>();
map.put("yi",1);
map.put("er",2);
map.put("san",3);
System.out.println("---------遍历---------");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + "----" + entry.getValue());
}
}
}
4、TreeMap类
4.1概述
TreeMap是Map接口基于红黑树的实现;默认对key进行自然排序;
4.2案例
public class TestTreeMap{
public static void main(String[]args){
TreeMap<Integer,String> hm = new TreeMap<Integer,String>();
hm.put(1,"CoreJava");
hm.put(4,"web框架");
hm.put(3,"JavaWeb");
hm.put(2,"Java进阶");
hm.put(5,"SpringBoot");
Set<Integer> set = hm.keySet();
for (Integer key:set){
String value = hm.get(key);
System.out.println(key+"---"+value);
}
}
}
5、HashTable类
5.1概述
Hashtable是个古老的Map实现类,JDK1.0就提供了,实现原理和HashMap相同;线程安全的、不可存储null的key和value。
5.2案例
package com.hg.Map.Hashtable;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
public class HashtableTest {
public static void main(String[] args) {
//HashMap的key、value为null
Map<String, String> hashMap = new HashMap<>();
hashMap.put(null,"value");
hashMap.put("key",null);
hashMap.put(null,null);
System.out.println(hashMap);
//Hashtable的key、value为null
Map<String,String> hashtable = new Hashtable<>();
//hashtable.put(null,"value");
//hashtable.put("key",null);
//hashtable.put(null,null);
hashtable.put("key","value");
System.out.println(hashtable);
}
}
6、Collections工具类
6.1概述
java.util.Collections是操作集合的工具类,此类不能实例化,封装了各种有关集合操作的静态多态方法。
6.2常用方法
| 方法 | 说明 |
|---|---|
|
public static void sort(List list) |
将指定的列表按升序排序 |
| public static void reverse(List list) |
反转指定列表中元素的顺序 |
| Object max(Collection) | 返回给定集合中的最大元素 |
| Object min(Collection) | 返回给定集合中的最小元素 |
| void copy(List dest,List src) | 将src中的内容复制到dest 中 |
6.3案例
package com.hg.collections;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class CollectionsTest {
public static void main(String[] args) {
List<Integer> src = new ArrayList<>();
src.add(123);
src.add(6);
src.add(55);
src.add(11);
src.add(44);
src.add(33);
src.add(666);
System.out.println("==============排序================");
Collections.sort(src); //排序
System.out.println(src);
System.out.println("==============反转================");
Collections.reverse(src); //反转
System.out.println(src);
System.out.println("==============最大值================");
System.out.println(Collections.max(src)); //最大值
System.out.println("==============最小值================");
System.out.println(Collections.min(src)); //最小值
System.out.println("==============拷贝================");
List<Object> list = Arrays.asList(new Object[10]);
System.out.println(list.size()); //10,不是真正的ArrayList
//Collections.copy();该方法不好用,用以下代替
List<Integer> dest = new ArrayList<>(src);
System.out.println(dest);
List<Integer> dest2 = new ArrayList<>();
dest2.addAll(src);
System.out.println(dest2);
}
}
更多推荐




所有评论(0)