本文主要介绍Map的的一些方法
HashMap:
1. 底层使用哈希表,查询很快
2. 无序
LinkedHashMap:
1. 继承HashMap
2. 有序,底层是哈希表(数组+链表/红黑树)+链表(用来存储数据的顺序)
两者的主要实现方法
主要的方法:
public V put(key,value);返回原先key被替换的值
public V remove(Object key); 把指定的键中的值删除,并且返回被删除的元素的值
public V get(Object key); 返回键中对应的值,不存在则返回null;
public boolean containKey(Object key); 是否包含指定的键
代码实现
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo {
public static void main(String[] args) {
demo01(); //public V put(key,value);返回原先key被替换的值
demo02(); //public V remove(Object key); 把指定的键中的值删除,并且返回被删除的元素的值
demo03(); //public V get(Object key);//得到这个键对应的values
demo04(); //public boolean containKey(Object key)//是否包含这个键
}
private static void demo01() {
Map<String, String> map = new HashMap<>();
String s1 = map.put("hello", "hcr");
String s2 = map.put("lzf", "lma");
String s3 = map.put("hello", "wkw");//替换hello这个键中的值
map.put("lengfeng", "longxiaoyun");
System.out.println("s1:" + s1);
System.out.println("s2:" + s2);
System.out.println("s3:" + s3);
System.out.println(map);// 输入与输出是没有顺序的
}
public static void demo02()
{
Map<String,Integer> map = new HashMap<>();
map.put("lwt",172);
map.put("ljt",177);
map.put("ljy",187);
System.out.println(map);
Integer i = map.remove("lwt");//删除键,以及返回值
Integer dyp = map.remove("dyp");
System.out.println(dyp);//输出为空值
System.out.println(i);
System.out.println(map);
}
private static void demo03() {
Map<String,Integer> map = new HashMap<>();
map.put("lwt",172);
map.put("ljt",177);
map.put("ljy",187);
Integer i1 = map.get("lwt");
System.out.println(i1); //172
}
private static void demo04() {
Map<String,Integer> map = new HashMap<>();
map.put("lwt",172);
map.put("ljt",177);
map.put("ljy",187);
System.out.println(map);
Integer i = map.remove("lwt");//删除键,以及返回值
Integer dyp = map.remove("dyp");
System.out.println(map.containsKey("lwt"));// false
System.out.println(map.containsKey("ljt"));
}
}
HashMap的遍历方法
public Set<Key> keySet();
把map中所有的key中存到set中,键找值public Set<Map.entry<K,V>> entry();
Map.Entry<K,V>是一个对象,存入一个entry对象,然后通过获取getKey()以及getValue()的值
具体实现代码
package Demo01.MapDemo;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
//public Set<Key> keySet();//把map中所有的key中存到set中,键找值
//1.先得到key的集合set
//2.遍历set集合
//3.获取set中的每个对象,对象为key
//4.通过key的值来获取map中对应的values值
//public Set<Map.entry<K,V>> entry();
/*
1.返回的是一个set对象
2.便利set集合
3.遍历set集合
4.获取set集合中的每个对象
5.Entry对象中有两个方法
getKey() //得到键
getValue() //得到值
6.
* */
public class HashMapDemo02 {
public static void main(String[] args) {
demo01();
System.out.println("========================");
demo02();
}
private static void demo01()
{
Map<String,Integer> map = new HashMap<>();
map.put("lwt",172);
map.put("ljt",177);
map.put("ljy",187);
Set<String> set = map.keySet();
// Iterator<String> it = set.iterator();
for(String s : set)
{
Integer i = map.get(s);
System.out.println(s+":" +i);
}
}
private static void demo02()
{
Map<String,Integer> map = new HashMap<>();
map.put("lwt",172);
map.put("ljt",177);
map.put("ljy",187);
Set<Map.Entry<String,Integer>> set = map.entrySet();
for(Map.Entry<String,Integer> E: set)
{
System.out.println(E.getKey()+ ": " +E.getValue());
}
}
}
HashMap中存取自定义的值
key中一定要复习equasl()和hashCode()方法
LinkedHashMap
主要是有序(记得住存储的顺序),其他没啥
package Demo01.MapDemo;
import java.util.HashMap;
import java.util.LinkedHashMap;
public class LinkedHashMapDemo {
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
map.put("c","c");
map.put("b","b");
map.put("a","a");
map.put("a","d");
System.out.println(map);
LinkedHashMap<String,String> linked = new LinkedHashMap<>();
linked.put("c","c");
linked.put("a","a");
linked.put("b","b");
linked.put("a","d");
System.out.println(linked);
}
}
//output:
// {a=d, b=b, c=c}
//{c=c, a=d, b=b}
HashMap和HashTable的那些事
HashTable:低层是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢,不可以存储null值也不可以存储null键
HashMap: 底层是一个哈希表,是一个线程不安全的集合,多线程集合,速度快,可以存null值和null键