基础类,没有重写hashCode()和equals()方法:
package niukewang; import java.util.Objects; public class setClass { String a; String b; public setClass(String a, String b) { this.a=a; this.b=b; } }
测试类:
package niukewang; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; import java.util.Vector; public class test1 { public static void main(String args[]) { setClass s1=new setClass("http://www.yjbys.com/", ""); setClass s2=new setClass("http://www.yjbys.com1/", ""); setClass s3=new setClass("http://www.yjbys.com2/", ""); setClass s4=new setClass("http://www.yjbys.com2/", ""); //hasSet System.out.println("hasSet......"); Set<setClass> set=new HashSet<setClass>(); set.add(s1); set.add(s2); set.add(s3); set.add(s4); Iterator it= set.iterator(); while(it.hasNext()) { setClass ob=(setClass)it.next(); System.out.println(ob.a); } /* //TreeSet System.out.println("\nTreeSet........"); Set<setClass> tree=new TreeSet<setClass>(); tree.add(s1); tree.add(s2); tree.add(s3); tree.add(s4); Iterator treeit=tree.iterator(); while(treeit.hasNext()) { setClass ob=(setClass) treeit.next(); System.out.println(ob.a); } */ //TreeMap /* System.out.println("\nTreeMap........."); Map<setClass,String> treemap=new TreeMap<setClass,String>(); treemap.put(s1, "TreeMap one"); treemap.put(s2, "TreeMap two"); treemap.put(s3, "TreeMap three"); treemap.put(s4, "TreeMap four"); for(Map.Entry<setClass, String> entry: treemap.entrySet()) { System.out.println("The treemap key is "+entry.getKey().a+" The value is "+ entry.getValue()); }*/ //HasMap System.out.println("\nHashMap......"); Map<setClass,String> hashmap=new HashMap<setClass, String>(); hashmap.put(s1, "HashMap one"); hashmap.put(s2, "HashMap two"); hashmap.put(s3, "HashMap three"); hashmap.put(s4, "HashMap four"); for(Map.Entry<setClass, String> entry : hashmap.entrySet()) { System.out.println("The key is "+entry.getKey().a+" The value is "+entry.getValue()); } //HasTable System.out.println("\nHashTable......"); Map<setClass,String> hashtable=new Hashtable<setClass, String>(); hashtable.put(s1, "HashTable one"); hashtable.put(s2, "HashTable two"); hashtable.put(s3, "HashTable three"); hashtable.put(s4, "HashTable four"); for(Map.Entry<setClass, String> entry: hashtable.entrySet()) { System.out.println("The HashTable key is "+entry.getKey().a+" The HashTable value is "+entry.getValue()); } //LinkedList System.out.println("\nLinkedList....."); List list=new LinkedList(); list.add(s1); list.add(s2); list.add(s3); list.add(s4); Iterator listit=list.iterator(); while(listit.hasNext()) { setClass ob=(setClass)listit.next(); System.out.println(ob.a); } //ArrayList System.out.println("\nArrayList....."); List array=new ArrayList(); array.add(s1); array.add(s2); array.add(s3); array.add(s4); Iterator arrayit=array.iterator(); while(arrayit.hasNext()) { setClass ob=(setClass)arrayit.next(); System.out.println(ob.a); } //vector System.out.println("\nvector....."); Vector v=new Vector(); v.add(s1); v.add(s2); v.add(s3); v.add(s4); Iterator vit=v.iterator(); while(vit.hasNext()) { setClass ob=(setClass)vit.next(); System.out.println(ob.a); } } }
输出结果:
由于没有重写hasCode和equals方法,所以s3和s4对象认为是不相同的,因此在set中被看成了不同的对象;同理,在hashMap和hashTable中,其根据hashCode的值对数据进行存储的,所以,hashcode的值不一样,因此也存储了4个数。
hasSet...... http://www.yjbys.com1/ http://www.yjbys.com2/ http://www.yjbys.com/ http://www.yjbys.com2/ HashMap...... The key is http://www.yjbys.com1/ The value is HashMap two The key is http://www.yjbys.com2/ The value is HashMap four The key is http://www.yjbys.com/ The value is HashMap one The key is http://www.yjbys.com2/ The value is HashMap three HashTable...... The HashTable key is http://www.yjbys.com2/ The HashTable value is HashTable four The HashTable key is http://www.yjbys.com2/ The HashTable value is HashTable three The HashTable key is http://www.yjbys.com1/ The HashTable value is HashTable two The HashTable key is http://www.yjbys.com/ The HashTable value is HashTable one LinkedList..... http://www.yjbys.com/ http://www.yjbys.com1/ http://www.yjbys.com2/ http://www.yjbys.com2/ ArrayList..... http://www.yjbys.com/ http://www.yjbys.com1/ http://www.yjbys.com2/ http://www.yjbys.com2/ vector..... http://www.yjbys.com/ http://www.yjbys.com1/ http://www.yjbys.com2/ http://www.yjbys.com2/
改变之后的。
基础类:
package niukewang; import java.util.Objects; public class setClass { String a; String b; public setClass(String a, String b) { this.a=a; this.b=b; } public int hashCode() { return a.hashCode(); } public boolean equals(Object obj) { if(obj==null) return false; if(getClass() != obj.getClass()) return false; final setClass s=(setClass)obj; return Objects.equals(this.a, s.a); } }
测试类:
package niukewang; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; import java.util.Vector; public class test1 { public static void main(String args[]) { setClass s1=new setClass("http://www.yjbys.com/", ""); setClass s2=new setClass("http://www.yjbys.com1/", ""); setClass s3=new setClass("http://www.yjbys.com2/", ""); setClass s4=new setClass("http://www.yjbys.com2/", ""); //hasSet System.out.println("hasSet......"); Set<setClass> set=new HashSet<setClass>(); set.add(s1); set.add(s2); set.add(s3); set.add(s4); Iterator it= set.iterator(); while(it.hasNext()) { setClass ob=(setClass)it.next(); System.out.println(ob.a); } /* //TreeSet System.out.println("\nTreeSet........"); Set<setClass> tree=new TreeSet<setClass>(); tree.add(s1); tree.add(s2); tree.add(s3); tree.add(s4); Iterator treeit=tree.iterator(); while(treeit.hasNext()) { setClass ob=(setClass) treeit.next(); System.out.println(ob.a); } */ //TreeMap /* System.out.println("\nTreeMap........."); Map<setClass,String> treemap=new TreeMap<setClass,String>(); treemap.put(s1, "TreeMap one"); treemap.put(s2, "TreeMap two"); treemap.put(s3, "TreeMap three"); treemap.put(s4, "TreeMap four"); for(Map.Entry<setClass, String> entry: treemap.entrySet()) { System.out.println("The treemap key is "+entry.getKey().a+" The value is "+ entry.getValue()); }*/ //HasMap System.out.println("\nHashMap......"); Map<setClass,String> hashmap=new HashMap<setClass, String>(); hashmap.put(s1, "HashMap one"); hashmap.put(s2, "HashMap two"); hashmap.put(s3, "HashMap three"); hashmap.put(s4, "HashMap four"); for(Map.Entry<setClass, String> entry : hashmap.entrySet()) { System.out.println("The key is "+entry.getKey().a+" The value is "+entry.getValue()); } //HasTable System.out.println("\nHashTable......"); Map<setClass,String> hashtable=new Hashtable<setClass, String>(); hashtable.put(s1, "HashTable one"); hashtable.put(s2, "HashTable two"); hashtable.put(s3, "HashTable three"); hashtable.put(s4, "HashTable four"); for(Map.Entry<setClass, String> entry: hashtable.entrySet()) { System.out.println("The HashTable key is "+entry.getKey().a+" The HashTable value is "+entry.getValue()); } //LinkedList System.out.println("\nLinkedList....."); List list=new LinkedList(); list.add(s1); list.add(s2); list.add(s3); list.add(s4); Iterator listit=list.iterator(); while(listit.hasNext()) { setClass ob=(setClass)listit.next(); System.out.println(ob.a); } //ArrayList System.out.println("\nArrayList....."); List array=new ArrayList(); array.add(s1); array.add(s2); array.add(s3); array.add(s4); Iterator arrayit=array.iterator(); while(arrayit.hasNext()) { setClass ob=(setClass)arrayit.next(); System.out.println(ob.a); } //vector System.out.println("\nvector....."); Vector v=new Vector(); v.add(s1); v.add(s2); v.add(s3); v.add(s4); Iterator vit=v.iterator(); while(vit.hasNext()) { setClass ob=(setClass)vit.next(); System.out.println(ob.a); } } }
输出结果:
由于覆盖了hashCode和equals方法,因此s3和s4被认为是相同的对象。
hasSet...... http://www.yjbys.com1/ http://www.yjbys.com/ http://www.yjbys.com2/ HashMap...... The key is http://www.yjbys.com1/ The value is HashMap two The key is http://www.yjbys.com/ The value is HashMap one The key is http://www.yjbys.com2/ The value is HashMap four HashTable...... The HashTable key is http://www.yjbys.com1/ The HashTable value is HashTable two The HashTable key is http://www.yjbys.com/ The HashTable value is HashTable one The HashTable key is http://www.yjbys.com2/ The HashTable value is HashTable four LinkedList..... http://www.yjbys.com/ http://www.yjbys.com1/ http://www.yjbys.com2/ http://www.yjbys.com2/ ArrayList..... http://www.yjbys.com/ http://www.yjbys.com1/ http://www.yjbys.com2/ http://www.yjbys.com2/ vector..... http://www.yjbys.com/ http://www.yjbys.com1/ http://www.yjbys.com2/ http://www.yjbys.com2/
但是TreeSet和TreeMap还是不能这么输出,因为要实现Comparable接口。因为TreesSet和TreeMap是一个有序的集合,必须知道你想怎么排列。你可以换成LinkedList或ArrayList就不用了。
下一篇文章是对TreeSet和TreeMap的输出。