gpt4 book ai didi

java - 设置接口(interface)Java

转载 作者:行者123 更新时间:2023-12-01 23:40:33 26 4
gpt4 key购买 nike

以下函数使用 HashMap 返回数组中数字的频率。在这个函数中有一行:-

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

上面的代码是如何工作的。我知道Set是一个接口(interface),并且有很多实现类,例如HashSet,TreeSet等。但是什么map.keySet()返回 set多变的 ?另外,当我们写Set<Integer> set= new HashSet();时如何使用 set 变量访问 HashSetset是一个接口(interface)变量?

public static int[] GetFrequency(int [] array){

HashMap<Integer ,Integer > map = new HashMap<Integer,Integer>();

for(int i =0;i<array.length;i++){

if(map.get(array[i])==null) map.put(array[i],1);
else{
int k = map.get(array[i]);
map.put(array[i],k+1);
}

}

int a[] = new int[map.size()];

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

int i =0;
for(int s : set)
a[i++]=map.get(s);
return a;

}

最佳答案

Set set= map.keySet();

How the above line works.

仅仅因为<a href="http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html#keySet%28%29" rel="noreferrer noopener nofollow">HashMap.keySet()</a>返回 <a href="http://docs.oracle.com/javase/6/docs/api/java/util/AbstractSet.html" rel="noreferrer noopener nofollow">AbstractSet</a> 的实现(内部),它实现 <a href="http://docs.oracle.com/javase/6/docs/api/java/util/Set.html" rel="noreferrer noopener nofollow">Set</a>

Also when we write Set set= new HashSet(); how the set variable can be used to access HashSet as set is an interface variable ?

Set接口(interface)定义了一个合约,并且HashSet作为实现者遵守契约(Contract)(实现所有方法)。这样SetHashSet super 类型 ,所以HashSet可以分配给Set

如果我们说Set<String> set = new HashSet<String>(); ,与 set只会访问 Set 中定义的那些方法契约(接口(interface))。大多数人更喜欢定义父类(super class)型的引用(即 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");

关于java - 设置接口(interface)Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18014594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com