Java谜题选 - II[Java编程]
本文“Java谜题选 - II[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
标题2:关于Sets的更多Fun.
对了,这个标题表面上看也是关于Sets的...
程序
import java.net.*;
public class UrlSet {
private static final String[] URL_NAMES = {
"http://javapuzzlers.com",
"http://apache2-snort.skybar.dreamhost.com",
"http://www.谷歌.com",
"http://javapuzzlers.com",
"http://findbugs.sourceforge.net",
"http://www.bianceng.cn"
};
public static void main (string[] args)
throws MalformedURLException {
Set<URL> favorites = new HashSet<URL>();
for (String urlName : URL_NAMES)
favorites.add(new URL(urlName));
System.out.println(favorites.size());
}
}
答案
(a) 4
(b) 5
(c) 6
(d) None of the above
译者序:
因为近来忙,这个第二集的答案出得太晚了点,但愿大家包涵.
另:程序中的一行忘掉了括号,Set<URL> favorites = new HashSet<URL>(); 我已经加上了,多谢读者的细心.
谜题一之答案,解析历程,以及经验教导
答案
(d) None of the above
解析历程
假如运行此程序所在的机械与互联网相接,那么答案将是(a) 4.为什么呢?因为URL接口的equals和hashCode办法完好搞错了.
"http://javapuzzlers.com"和"http://apache2-snort.skybar.dreamhost.com",这两个完好差别的网址,解析成的IP地址竟是完好相同的!(译者注:存放这两个差别网址的web服务器明显只有一个,用的是以名称为底子的同享IP网络存放技术,这明显是出题者有意为之,即所谓的Virtual Host)
按照URL类的技术文档,两个URL对象将被认为相等,假如以下条件得到满意:
利用一样的通信协议,引用相当的存放服务器,利用一样的端口,一样的文件或一样的一部份文件.
两个存放服务器被认为是相等的,假如两个名称被解析成同一个IP地址,大概两个名称都不可被解析,大概两个名称同为空(null).
因此,假如运行此程序所在的机械不与互联网相接,得到的后果将是1,应为全部名称都不可被解析.这个题的答案因此是(d) None of the above.差别网络环境下的运行,就有差别的后果,这实在是对比糟糕的.
URL类的equals办法是不支持Virtual Host(虚拟存放)功效的.93年URL类被加进java平台时,基本是没有虚拟存放这个技术的.
经验教导
URL类有bug,不要利用URL,应当利用URI类.
URI类的equals办法只会举行字符的对比.程序改成Set<URI> favorites = new HashSet<URI>(); 打印出来的后果就是5了,因为有两个"http://javapuzzlers.com"的来由.
同时,favorites.add(new URL(urlName))这路程序也要改成favorites.add(URI.create(uriname));
注意这里用的是更好的静态工厂的情势,而不是普通的成立,这也是URI所差别于URL的.
以上是“Java谜题选 - II[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:Java相对途径寻址
- ·下一篇文章:Java谜题选 - I
- ·中查找“Java谜题选 - II”更多相关内容
- ·中查找“Java谜题选 - II”更多相关内容