Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置接口Java_Java_Collections - Fatal编程技术网

设置接口Java

设置接口Java,java,collections,Java,Collections,下面的函数使用HashMap返回数组中数字的频率。此函数中有一行:- Set<Integer> set= map.keySet(); Set=map.keySet() 这条线是如何工作的 因为返回(内部)的impmenentation,它实现了 同样,当我们写Set=newhashset()时;布景怎么样 变量可用于访问HashSet,因为set是接口变量 ? Set接口定义一个契约,并且HashSet作为实现者遵守契约(实现所有方法)。这样,Set是HashSet的超级类型,因此

下面的函数使用HashMap返回数组中数字的频率。此函数中有一行:-

Set<Integer> set= map.keySet();
Set=map.keySet()

这条线是如何工作的

因为
返回
(内部)的impmenentation,它实现了

同样,当我们写Set=newhashset()时;布景怎么样 变量可用于访问HashSet,因为set是接口变量 ?

Set
接口定义一个契约,并且
HashSet
作为实现者遵守契约(实现所有方法)。这样,
Set
HashSet
超级类型,因此可以将
HashSet
分配给
Set

如果我们说
Set Set=newhashset()
,使用
set
仅访问
set
合同(界面)中定义的那些方法。大多数人更喜欢定义超类型的引用(即,e
Set
),因为明天如果实现发生更改,则不需要对代码的其他部分进行代码更改

例如:

//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
合同(界面)中定义的那些方法。大多数人更喜欢定义超类型的引用(即,e
Set
),因为明天如果实现发生更改,则不需要对代码的其他部分进行代码更改

例如:

//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
的内部值,而不是创建副本。它是内部数据的“视图”。