Map之HashMap外加HashTable(外加线程安全部分理解)

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相比并没有什么不同。

发布了64 篇原创文章 · 获赞 2 · 访问量 847

猜你喜欢

转载自blog.csdn.net/cdut2016/article/details/103927296