class CountedString
{
private String s;
private int id=0;
private static ArrayList list=new ArrayList();
public CountedString(String str)
{
s=str;
list.add(s);
Iterator it=list.iterator();
while(it.hasNext())
{
if(it.next().equals(s))
{
id++;
}
}
}
public String toString()
{
return "String:"+s+", id:"+id+", hashCode():"+hashCode();
}
public int hashCode()
{
return s.hashCode()*id;
}
public boolean equals(Object ob)
{
if((ob instanceof CountedString) && (s.equals(((CountedString)ob).s)) && (id==((CountedString)ob).id))
{
return true;
}
else
{
return false;
}
}
public static void main(String[] args)
{
HashMap hm=new HashMap();
CountedString[] cs=new CountedString[2];
for(int i=0;i<cs.length;i++)
{
cs[i]=new CountedString("Hello");
hm.put(cs[i],new Integer(i));
}
System.out.println(hm);
for(int i=0;i<cs.length;i++)
{
System.out.println("LookUp:"+cs[i]);
System.out.println(hm.get(cs[i]));
}
}
}当我把toString()方法去掉,在cs[i]=new CountedString("Hello");这句的下面加上一句System.out.println(cs[i]);
我是想看看执行完cs[i]=new CountedString("Hello");这句后,在cs[i]中存放的数据。可是什么也打印不出来,这是因为什么?
import java.util.HashMap;
import java.util.Iterator;
public class CountedString
{
private String s;
private int id=0;
private static ArrayList list=new ArrayList();
public CountedString(String str)
{
s=str;
list.add(s);
Iterator it=list.iterator();
while(it.hasNext())
{
if(it.next().equals(s))
{
id++;
}
}
}
public String toString()
{
return "String:"+s+", id:"+id+", hashCode():"+hashCode();
}
public int hashCode()
{
return s.hashCode()*id;
}
public boolean equals(Object ob)
{
if((ob instanceof CountedString) && (s.equals(((CountedString)ob).s)) && (id==((CountedString)ob).id))
{
return true;
}
else
{
return false;
}
}
public static void main(String[] args)
{
HashMap hm=new HashMap();
CountedString[] cs=new CountedString[2];
for(int i=0;i<cs.length;i++)
{
cs[i]=new CountedString("Hello");
hm.put(cs[i],new Integer(i));
}
System.out.println(hm);
for(int i=0;i<cs.length;i++)
{
System.out.println("LookUp:"+cs[i]);
System.out.println(hm.get(cs[i]));
}
}
}