设计有setAll功能的哈希表

import java.util.*;
//设计有setAll功能的哈希表
public class GetSetAllHash{
	  //内部类实现map的存储
	 public static class MyValue<V>
	 {
	 	  private V value; //存储的值
	 	  private long time; //存储的时间

	 	  public MyValue(V value,long time)
	 	  {
	 	  	  this.value=value;
	 	  	  this.time=time;
	 	  }
          
          //获得所需要的值
	 	  public V getValue()
	 	  {
	 	  	 return this.value;
	 	  }

	 	  //获得时间
	 	  public long getTime()
	 	  {
             return this.time;
	 	  }

	 }

	 //真正实现的MyhashMap
	 public static class MyHashMap<K,V>{

           private HashMap<K,MyValue<V>> basehash;
           private long time;
           private MyValue<V> setAll;
           
           //初始化对象
           public MyHashMap()
           { 
           	  this.basehash=new HashMap<K,MyValue<V>>();
           	  this.time=0;
           	  this.setAll=new MyValue<V>(null,-1);

           }

           //(1)函数1 判断是否包含一个值
           public boolean containsKey(K key)
           {

              return this.basehash.containsKey(key);
           }
           //(2)函数2  设置值
            public void put(K key,V value)
            {
            	 this.basehash.put(key,new MyValue<V>(value,this.time++));
            }
           //(3)函数3  setAll 函数
            public void setAll(V value)
            {
            	  this.setAll=new MyValue<V>(value,this.time++);
            }
            //(4) 函数4 get函数
            public V get(K key)
            {

            	if(this.containsKey(key))
            	{
                    //通过时间序列,查看是否被更改过
                    if(this.basehash.get(key).getTime()>this.setAll.getTime())
                    {
                    	 return this.basehash.get(key).getValue();
                    }else{

                         return this.setAll.getValue();
  
                    }

            	}else{

            		 return null;
            	}

            }
	 }
   
	  public static void main(String[]args)
	  {
	    MyHashMap<String, Integer> test = new MyHashMap<String, Integer>();
		test.put("Tom", 1);
		test.put("James", 2);
		System.out.println(test.containsKey("Tom"));
		System.out.println(test.get("Tom"));
		System.out.println(test.containsKey("Jame"));
		System.out.println(test.get("James"));
		test.setAll(3);
		test.put("Rose", 4);
		System.out.println(test.get("Tom"));
		System.out.println(test.get("James"));
		System.out.println(test.get("Rose"));
		test.setAll(5);
		System.out.println(test.get("Tom"));
		System.out.println(test.get("James"));
		System.out.println(test.get("Rose"));
	  }
}

引用\[1\]中提到了哈希表的正向迭代器的实现,其中包括存储哈希表地址的成员变量。引用\[2\]中提到了哈希表的析构函数的实现,其中释放了哈希表中的结点。引用\[3\]中提到了哈希表的拷贝构造函数的实现,其中进行了深拷贝操作。根据这些信息,我们可以得出哈希表的一些特点和功能。 首先,哈希表是一种数据结构,用于存储键值对。它通过哈希函数将键映射到桶中,并将值存储在对应的桶中。哈希表的实现通常使用数组来表示桶,每个桶中存储一个链表或红黑树来解决哈希冲突。 哈希表的正向迭代器是对哈希结点指针的封装,其中存储了哈希表的地址。通过迭代器,我们可以遍历哈希表中的键值对。 哈希表的析构函数用于释放哈希表中的结点。它遍历哈希表的每个桶,释放桶中的结点,并将桶置为空。 哈希表的拷贝构造函数实现了深拷贝操作。它将源哈希表的大小调整为目标哈希表的大小,然后将源哈希表中的每个桶中的结点一个个拷贝到目标哈希表中,并更新目标哈希表的有效数据个数。 综上所述,哈希表是一种用于存储键值对的数据结构,它提供了正向迭代器、析构函数和拷贝构造函数等功能。 #### 引用[.reference_title] - *1* *2* *3* [C++ STL(九) -------- 哈希表封装unordered_map和unordered_set](https://blog.csdn.net/m0_52169086/article/details/126709111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值