Java中键盘()方法的作用是什么

  

Java中键盘()方法的作用是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

,, public  Set,键盘(),{   ,,,Set, ks =,键盘;   ,,,if  (ks ==, null), {   ,,,,,ks =, new 键盘();   ,,,,,keySet =, ks;   ,,,}   ,,,return  ks;   以前,,}

从代码中了解到,第一次调用键盘方法时,键盘属性是null,然后进行了初始化,再将键盘属性返回。也就是说,HashMap里并不会随着把和移除的进行也维护一个键盘集合,而是在第一次调用键盘方法时,才给键盘属性初始化。

按照自己以往的理解,以为键盘返回的是一个集合,集合里面保存了HashMap的所有的关键。因为有了中先入为主的印象,所以读源码时,才感觉源码很奇怪。从源码中可以看的到,初始化时,只是创建了一个键盘类的对象,并没有把HashMap的关键都加入进来,方法就返回了。除了自己以往的理解外,还有一个现象,让我坚信这时HashMap的关键已经加入到键盘了,那就是在调试代码过程中IDE给出的调试信息。如下图,从图中可以看的出,创建完成键盘()后,调试信息就已经可以显示出,ks中有2个元素了。这个信息更加坚定了自己之前的理解。

癑ava中键盘()方法的作用是什么"

那么,HashMap的关键是什么时候加入到键盘集合中的呢?顺着这个思路,我进行了一步一步的分析。自己看了键盘类的构造函数,发现只有默认构造函数。那么我想,如果没有在键盘构造函数里把HashMap的关键加入进的来,那么就有可能是在键盘的父类的构造函数中加入进来的。然后,自己找遍了键盘类的父类的构造函数,发现都是空实现,并没有任何加入HashMap的关键的操作。这到底是怎么回事呢?

其实HashMap的关键并没有加入到键盘集合中,而是在遍历的时候,使用迭代器对关键进行的遍历。这是结论。下面我们看一下原因和过程。

首先看一下键盘类的代码,如下图。可以看到,键盘类中的迭代器函数,返回的是一个KeyIterator类的对象。它的下方法返回的是HashIterator的nextNode的关键。也就是说,当使用迭代器遍历集合内的元素时,键盘类的迭代器,会保证能够依次获取到HashMap的节点的关键值,这就是我们遍历键集的过程的实质。

,, final  class  KeySet  extends  AbstractSet, {   ,,,public  final  int 大小(),,,,,,,,,{,return 规模;,}   ,,,public  final  void 明确(),,,,,,,,{,HashMap.this.clear ();,}   ,,,public  final  Iterator, iterator (),,, {, return  new  KeyIterator ();,}   ,,,public  final  boolean 包含(Object  o), {, return  containsKey (o);,}   ,,,public  final  boolean 删除(Object 键),{   ,,,,,return  removeNode(散列(关键),钥匙,,空,,假的,,真的),!=,空;   ,,,}   ,,,public  final  Spliterator, spliterator (), {   ,,,,,return  new  KeySpliterator<祝辞(HashMap.this, 0, 1, 0, 0);   ,,,}   ,,,public  final  void  forEach (Consumer<?, super  K>,动作),{   ,,,,,Node[],标签;   ,,,,,if  (action ==, null)   ,,,,,,,throw  new  NullPointerException ();   ,,,,,if  (0, size 的在,,,,,(=tab 表),!=,null), {   ,,,,,,,int  mc =, modCount;   ,,,,,,,for  (int 小姐:=,0;,小姐:& lt;, tab.length;, + + i), {   ,,,,,,,,,for  (Node, e =,标签[我];,e  !=,零;,e =, e.next)   ,,,,,,,,,,,action.accept (e.key);   ,,,,,,,}   ,,,,,,,if  (modCount  !=, mc)   ,,,,,,,,,throw  new  ConcurrentModificationException ();   ,,,,,}   ,,,}   ,,}   final 才能class  KeyIterator  extends  HashIterator   ,,,implements  Iterator, {   ,,,public  final  K  next (), {, return  nextNode ()。key;,}   ,,}   abstract 才能class  HashIterator  {   ,,,Node,下一个,,,,,//,next  entry 用回报   ,,,Node,现在,,,,//current 条目   ,,,int  expectedModCount;,//for  fast-fail   ,,,int 指数;,,,,,,,//current 槽   ,,,HashIterator (), {   ,,,,,expectedModCount =, modCount;   ,,,,,Node [], t =,表;   ,,,,,current =, next =,空;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Java中键盘()方法的作用是什么