HashMap来说Key和value都可以为null,是线程不安全的。
我在以前的博客也有提到过,线程不安全可以理解为有一个人去买火车票,但是
这个兄弟和我一样比较穷,他只有很多的零钱,所以他在那里数钱,这时候来了一个富二代,他直接可以很快的付钱,那么这张票能不能卖给富二代同志呢?
如果这张票能卖给他那么就是线程不安全的,如果不能卖给他就是线程安全的。大家可以暂时这么理解,或者也可以去看看其他大神的博文了解一下。
我们直接来写个类测试一波。
```java
/**
* @author Hercules
* @version 创建时间:2020年1月10日 下午4:52:48
* 测试实验类
*/
public class Test {
public static void main(String[] args) {
/*Map中是键值对,<>中第一个是键也就是key值,第二个是value值,这两个东西可以为
* 任意类型,但是当我们用基本数据类型作为其中的类型的时候最好用封装类
* */
Map<String,Integer> map = new HashMap<String,Integer>();
//下面添加数据
map.put("b", 22);
map.put("a", 11);
map.put("d", 44);
map.put("c", 33);
//循环遍历输出
//作为HashMap的循环是不能够直接遍历的,这里先利用一种方法
//将每一对键值封装成一个Entry然后放入Set集合
Set<Entry<String,Integer>> entrys = map.entrySet();
for(Entry<String,Integer> entry :entrys) {
System.out.print(entry.getKey()+" ");
System.out.println(entry.getValue());
}
}
}
下面我们再在循环上面加一条。
//key值相同的时候,会覆盖原本的值这就称为修改
map.put("a", 66);
结果如下:
我们也可以放空值进去:
//我们也可以放空值进去
map.put(null, null);
结果如下:
//删除 用key去删除元素,返回元素的值
Integer i = map.remove("a");
System.out.println(i);
可以看到已经没有以a为key的键值对了。
//获取数据,如果数据不存在返回null
System.out.println(map.get("b"));
System.out.println(map.get("z"));
结果:
//获取集合中元素的个数:
System.out.println(map.size());
HashTable来说这里只需要简单说一下,和HashMap一样都实现了Map接口,使用方法与HashMap是一样的但是线程是安全的,HashTable的key和value都不能为null。其他与HashMap相比并没有什么不同。