程序如下:
package dataStruct.set;import java.util.*;public class TestSet { /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
Set set = new HashSet();
String str1 = new String("123");
String str2 = new String("456");
String str3 = new String("123");
set.add(str1);
set.add(str2);
set.add(str3);
Iterator it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
Set set1 = new HashSet();
set1.add(new String("abc"));
set1.add(new String("xyz"));
set1.add(new String("abc"));
Iterator iter = set1.iterator();
while(iter.hasNext())
{
System.out.println(iter.next());
}
}}
测试输出为:
123
456
xyz
abc
奇怪之处就在于第二个为啥不是abc在前xyz在后呢?而且就是这个abc有点特殊,其他的都好啦,有没有高手给看看到底是咋回事?set接口判断重复的基准是啥?到底为啥呢?整了半天也没弄清楚到底是啥问题,高手指点啊!
package dataStruct.set;import java.util.*;public class TestSet { /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
Set set = new HashSet();
String str1 = new String("123");
String str2 = new String("456");
String str3 = new String("123");
set.add(str1);
set.add(str2);
set.add(str3);
Iterator it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
Set set1 = new HashSet();
set1.add(new String("abc"));
set1.add(new String("xyz"));
set1.add(new String("abc"));
Iterator iter = set1.iterator();
while(iter.hasNext())
{
System.out.println(iter.next());
}
}}
测试输出为:
123
456
xyz
abc
奇怪之处就在于第二个为啥不是abc在前xyz在后呢?而且就是这个abc有点特殊,其他的都好啦,有没有高手给看看到底是咋回事?set接口判断重复的基准是啥?到底为啥呢?整了半天也没弄清楚到底是啥问题,高手指点啊!
解决方案 »
- svn小小问题?
- 求一个运算表达式的正则表达
- 求助(急)java调用C++库的问题
- 在JDOM里,我用XMLOutputter类,把DOCUMNET对象输出到字符串,为什么St会有<xml version=..>开头,如何去除
- 如何获得系统时间?
- SWT的问题
- 请问如何在JAVA下面取得D或其他盘的大小,以及如何获取一个文件的创建日期?谢谢!
- jButton1按钮事件里try{}catch(这里怎么写){}
- 我安装了FreeJava3.0中文版,但是它的JDK我设置不对,请教高手!
- 一个很低级的java 异常问题,在线,急!急!急!急!急!
- 關於LineNumberReader 的問題
- 怎么感觉这个写不出来了。。。
可以联系一下数据结构中往一个hash表中增加项目的处理方法.
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length); //产生对应的存放位置
//查找是不是已经加入了这个Key
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
} modCount++;
//如果没有,加入该项,这里的i就是指定在HashMap中使用的用来存储数据的下标,从代码上面看,根据hash计算i
addEntry(hash, key, value, i);
return null;
}