散列表的概念
使用空间换时间,使用索引提高效率,把数组通过散列算法,将数据分离开来,存储于连续的内存空间中(数组)。将散列值作为数组的下边,如果散列值有重复的,将重复的数据放置在“散列桶”中,散列桶是线性表,那么能够快速通过散列值(或者下标)可以快速查找数据
注意:散列表的容积率达到75%时,效率最高,如果超过容积率75%时,列表自动扩容为原长度的的两倍,进行重新散列
Map接口实现类
①HashMap key-value键值对 查找效率最高
②Hashtable类 key-value线程安全
③Properties 类 字符串键值对
④TreeMap类 自然升序
Map接口API
package MapDemo;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
public class MapDemo {
public static void main(String[] args) {
//1.创建一个HashMap
Map map = new HashMap();
//2.添加元素(数组中位置,添加链表元素)
// a)key不可重复,value可以重复
// b)key只能有一个null
// c)Map接口查找效率是所有集合中最高的
map.put(1,"A");
map.put(2,"B");
map.put(3,"C");
map.put(4,"C");
map.put(1,"T");
map.put(2,null);
map.put(null,"F");
map.put(null,"E");
System.out.println("map集合里内容:"+map);//map集合里内容:{null=E, 1=T, 2=null, 3=C, 4=C}
//3.获取元素
Object obj = map.get(1);
System.out.println("obj:"+obj);//obj:T
//4.判断集合中是否包含对应的key
System.out.println("是否包含:"+map.containsKey(1));//是否包含:true
//5.判断集合中是否包含value对象
System.out.println("是否包含:"+map.containsValue("E"));//true
//6.集合是否为空
System.out.println("集合是否为空:"+map.isEmpty());//true
//7.获取集合元素个数
System.out.println("集合元素个数:"+map.size());//集合元素个数:5
//8.remove移除
//System.out.println(map.remove(1));//T 返回移除的对象
//9.将Map集合value转换成数组
Collection c = map.values();
System.out.println(c);//[E, T, null, C, C]
//10.HashSet HashMap的key
Set keySet = map.keySet();
System.out.println(keySet);//[null, 1, 2, 3, 4]
for(Object key : keySet){
System.out.println("key:"+key+"value:"+map.get(key));//key:nullvalue:E key:1value:T key:2value:null key:3value:C key:4value:C
}
//11.将Map集合转换成Set集合 将Map中的key和value看成一个整体
Set set = map.entrySet();
System.out.println(set);//[null=E, 1=T, 2=null, 3=C, 4=C]
for(Object object : set){
Entry entry = (Entry)object;
System.out.println(entry.getKey()+":"+entry.getValue());//1:T 2:null 3:C 4:C
}
}
}
HashMap特点
①初始化容量16,加载因子0.75
②非线程安全
③当集合在迭代过程中,不允许,map自身进行增加,删除操作,只能通过迭代器完成
HashMapAPI
与Map的API基本相同
TreeMap特点
①原理:二叉树算法的实现,进行自然排序
②默认容量为0
③非线程安全的
④在集合迭代过程中,不允许map自身进行增加,删除操作,只能通过迭代器完成
Demo
import java.util.HashMap;
import java.util.TreeMap;
public class TreeMapDemo2 {
public static void main(String[] args) {
//1.定义一个HashMap
HashMap hashMap = new HashMap();
//2.增加元素
hashMap.put(100,"A");
hashMap.put(20,"B");
hashMap.put(10,"C");
hashMap.put(140,"D");
hashMap.put(145,"E");
hashMap.put(40,"F");
hashMap.put(53,"G");
System.out.println(hashMap);//{145=E, 100=A, 20=B, 53=G, 40=F, 10=C, 140=D}
//3.创建一个TreeMap
TreeMap tree = new TreeMap(hashMap);
System.out.println(tree);//{10=C, 20=B, 40=F, 53=G, 100=A, 140=D, 145=E} //按key排序
}
}