当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .