/* 集合 的體系: ------------| Collection 單例集合的根接口 ----------------| List 如果是實現了List接口的集合類,具備的特點: 有序,可重復。 -------------------| ArrayList ArrayList 底層是維護了一個Object數組實現的。 特點: 查詢速度快,增刪慢。 -------------------| LinkedList LinkedList 底層是使用了鏈表數據結構實現的, 特點: 查詢速度慢,增刪快。 -------------------| Vector(了解即可) 底層也是維護了一個Object的數組實現的,實現與ArrayList是一樣的,但是Vector是線程安全的,操作效率低。 ----------------| Set 如果是實現了Set接口的集合類,具備的特點: 無序,不可重復。 -------------------| HashSet 底層是使用了哈希表來支持的,特點: 存取速度快. hashSet的實現原理: 往Haset添加元素的時候,HashSet會先調用元素的hashCode方法得到元素的哈希值 , 然后通過元素 的哈希值經過移位等運算,就可以算出該元素在哈希表中 的存儲位置。 情況1: 如果算出元素存儲的位置目前沒有任何元素存儲,那么該元素可以直接存儲到該位置上。 情況2: 如果算出該元素的存儲位置目前已經存在有其他的元素了,那么會調用該元素的equals方法與該位置的元素再比較一次 ,如果equals返回的是true,那么該元素與這個位置上的元素就視為重復元素,不允許添加,如果equals方法返回的是false,那么該元素運行 添加。 -------------------| TreeSet */ class Person{ int id; String name; public Person(int id, String name) { super(); this.id = id; this.name = name; } @Override public String toString() { return "{ 編號:"+ this.id+" 姓名:"+ this.name+"}"; } @Override public int hashCode() { System.out.println("=======hashCode====="); return this.id; } @Override public boolean equals(Object obj) { System.out.println("======equals======"); Person p = (Person)obj; return this.id==p.id; } } public class Demo2 { public static void main(String[] args) { /* HashSet set = new HashSet(); set.add("狗娃"); set.add("狗剩"); set.add("鐵蛋"); System.out.println("集合的元素:"+ set); */ HashSet set = new HashSet(); set.add(new Person(110,"狗娃")); set.add(new Person(220,"狗剩")); set.add(new Person(330,"鐵蛋")); //在現實生活中只要編號一致就為同一個人. System.out.println("添加成功嗎?"+set.add(new Person(110,"狗娃"))); System.out.println("集合的元素:"+set); } }