281/282LinkedHashMap集合和Hashtable集合
LinkedHashMap集合
我们知道HashMap保证成对元素唯一,并且查询速度很快,可是成对元素存放进去是没有顺序的,那么我们要保证有序,还要速度快怎么办呢?
在HashMap下面有一个子类LinkedHashMap,它是链表和哈希表组合的一个数据存储结构。
java.util.LinkedHashMap<K,V>entends HashMap<K,V>
Map接口的哈希表和链接列表实现,具有可预的迭代顺序。
底层原理:
哈希表+链表(记录元素的顺序)
public static void main(String[] args) {
HashMap<String,String>map = new HashMap<>();
map.put("a","a");
map.put("c","c");
map.put("b", "b");
map.put("a" , "d");
System.out.println(map);
LinkedHashMap<String,String> linked = new LinkedHashMap<>( );
linked .put("a" , "a" ) ;
linked.put( "c" , "c");
linked.put("b","b");
linked.put("a" ,"b");
System.out.println(linked);
}
package hashlinkedmap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
public class Deno1 {
public static void main(String[] args) {
//创建Map集合
Map map = new LinkedHashMap<>();
map.put("1", "乐迪");
map.put("2", "梁志超");
map.put("3", "卢本伟");
//获取所有键
Set set = map.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Object key = it.next();
Object value = map.get(key);
System.out.println("键:" + key + '\t' + "值:"+ value);
}
}
}
Hashtable集合
java.util.Hashtable<K,V>集合implements Map<K,V>接口
Hashtable:底层也是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢
HashNap:底层是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快
HashMap集合(之前学的所有的集合):可以存储null值, nulL键
Hashtable集合,不能存储null值,nut键
HashtabLe和vector集合一样,在jdk1.2版本之后被更先进的集合(HashMap, ArrayList)取代了
Hashtable的子类Properties依然活跃在历史舞台
Properties集合是一个唯—和I0流相结合的集合
HashMap<String, String> map = new HashMap<>();
map.put(null, "a");
map.put("b", null);
map.put(null, null);
System.out.println(map);
Hashtable<String, String> table = new Hashtable<>();
//table.put(nuLl, "a");//NuLlPointerException
//table.put( "b" , null); //NulLPointerException
table.put(null, null); //NuLLPointerException
public static void main(String[] args) {
Hashtable<String, Integer> hashtable = new Hashtable<>();
hashtable.put("迪迦奥特曼", 999991);
hashtable.put("赛文奥特曼", 999992);
hashtable.put("泰罗奥特曼", 999993);
hashtable.put("艾斯奥特曼", 999994);
hashtable.put("欧布奥特曼", 999995);
//方法一:entrySet
System.out.println("————————遍历————————");
Set<Map.Entry<String, Integer>> entrySet = hashtable.entrySet();
for (Map.Entry<String, Integer> entry : entrySet) {
System.out.println(entry.getKey()+"\t"+entry.getValue());
}
//键值相同则替代value,并返回原来的Value
hashtable.put("迪迦奥特曼", 999991);
//存入键相同的键值对相当于替换
hashtable.replace("赛文奥特曼", 999992);
hashtable.replace("欧布奥特曼", 999995, 999996);//使用新值替换老值
//存储键和值都是null值的元素
//删除
hashtable.remove("泰罗奥特曼");//直接通过键来删除映射关系
hashtable.remove("迪迦奥特曼", 999991);//通过完整的键值对删除映射关系
//方法二:KeySet
System.out.println("————————遍历————————");
Set<String> keySet = hashtable.keySet();
for (String key : keySet) {
System.out.println(key+"\t"+hashtable.get(key));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本