1234567891011121314151617181920212223242526package com.lk.C;import java.net.MalformedURLException;import java.net.URL;import java.util.HashSet;import ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package com.lk.C;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;
public class Test3 {
private static final String [] URLNAMES = {
"http://www.sina.com" ,//202.108.33.94
"http://www.nuw.edu.cn" ,//124.115.173.252
"http://javapuzzlers.com" ,//208.97.154.9
"http://www.google.com" ,//64.233.189.147
"http://Javapuzzlers.com" ,//208.97.154.9
"http://apache2-snort.skybar.dreamhost.com" //208.97.154.9
};
public static void main(String[] args) throws MalformedURLException {
// TODO Auto-generated method stub
Set<URL> favorites = new HashSet<URL>();
for (String urlName : URLNAMES){
favorites.add( new URL(urlName));
}
System.out.println(favorites.size());
}
}
|
輸出什麼?
答案:
在聯網的狀態下會輸出4,這是由於URL的equals比對方式。根據equals的文檔說明:如果兩個主機名可解析為同一IP地址,則認為兩個主機相同(即使主機名不等);如果有一個主機名無法解析,但這兩個主機名相等(不區分大小寫),或者兩個主機名都為null,則也認為這兩個主機相同。
也就是說,如果兩個URL的IP地址是相同的,那麼這兩個URL就是相等的。
如果在斷網時,這些都是無法解析成為IP地址的,這是就要判斷URL的名字,僅認為名字相同時才是相同URL(不區分大小寫),所以輸出是5。
所以:不要把URL應用與Set和Map的key中,可以使用URI來代替,這樣就不存在網路問題了。