设置接口Java
下面的函数使用HashMap返回数组中数字的频率。此函数中有一行:-设置接口Java,java,collections,Java,Collections,下面的函数使用HashMap返回数组中数字的频率。此函数中有一行:- Set<Integer> set= map.keySet(); Set=map.keySet() 这条线是如何工作的 因为返回(内部)的impmenentation,它实现了 同样,当我们写Set=newhashset()时;布景怎么样 变量可用于访问HashSet,因为set是接口变量 ? Set接口定义一个契约,并且HashSet作为实现者遵守契约(实现所有方法)。这样,Set是HashSet的超级类型,因此
Set<Integer> set= map.keySet();
Set=map.keySet()
这条线是如何工作的
因为
返回
(内部)的impmenentation,它实现了
同样,当我们写Set=newhashset()时;布景怎么样
变量可用于访问HashSet,因为set是接口变量
?
Set
接口定义一个契约,并且HashSet
作为实现者遵守契约(实现所有方法)。这样,Set
是HashSet
的超级类型,因此可以将HashSet
分配给Set
如果我们说Set Set=newhashset()
,使用set
仅访问set
合同(界面)中定义的那些方法。大多数人更喜欢定义超类型的引用(即,eSet
),因为明天如果实现发生更改,则不需要对代码的其他部分进行代码更改
例如:
//implementation can change
Set<String> set = new HashSet<String>();
//set = new TreeSet<String>();
//set = new LinkedHashSet<String>();
//this part will not be impacted
set.add("abc");
//实现可以更改
Set=newhashset();
//set=新树集();
//set=新LinkedHashSet();
//这部分不会受到影响
设置。添加(“abc”);
Set=map.keySet()
这条线是如何工作的
因为
返回
(内部)的impmenentation,它实现了
同样,当我们写Set=newhashset()时;布景怎么样
变量可用于访问HashSet,因为set是接口变量
?
Set
接口定义一个契约,并且HashSet
作为实现者遵守契约(实现所有方法)。这样,Set
是HashSet
的超级类型,因此可以将HashSet
分配给Set
如果我们说Set Set=newhashset()
,使用set
仅访问set
合同(界面)中定义的那些方法。大多数人更喜欢定义超类型的引用(即,eSet
),因为明天如果实现发生更改,则不需要对代码的其他部分进行代码更改
例如:
//implementation can change
Set<String> set = new HashSet<String>();
//set = new TreeSet<String>();
//set = new LinkedHashSet<String>();
//this part will not be impacted
set.add("abc");
//实现可以更改
Set=newhashset();
//set=新树集();
//set=新LinkedHashSet();
//这部分不会受到影响
设置。添加(“abc”);
理解这样的关系:
假设你有4个盒子,第一个是正方形,第二个是矩形,第三个和第四个是另一个形状,但最后,它们都是盒子
所以,盒子是底座,但是第四个盒子都有它的特殊形状
所以,我要告诉你的是,
HashSet
是一个集,但也有它自己的行为。理解这样的关系:
假设你有4个盒子,第一个是正方形,第二个是矩形,第三个和第四个是另一个形状,但最后,它们都是盒子
所以,盒子是底座,但是第四个盒子都有它的特殊形状
所以,我要说的是,HashSet
是一个Set
,但它也有自己的行为。听说过一种叫做多态性的东西吗?谷歌吧!这叫多态性,听说过多态性吗?谷歌吧!它称为多态性。HashMap.keySet()
不返回HashSet
,而是直接使用HashMap
的内部值而不是创建副本的Set
。它是内部数据的“视图”。HashMap.keySet()
不返回HashSet
,而是返回Set
的视图,该视图直接使用HashMap
的内部值,而不是创建副本。它是内部数据的“视图”。