Java 容器類
1.陣列的長度不可變, 作為容器呢,不是很方便, 需要時還得new一個更長的陣列,然後copyArray.
2.Java 提供了其他的容器類,用來裝東西的,變長, 放在堆空間中。
Collection 裡面的東西都是物件,向Collection 中新增的必須是Object必須是引用型別的物件。 因為基礎資料型別是放在棧空間中的,加到堆中的容器中,基本資料型別在stack中容易被收走
容器裡面裝的是物件的引用,當你列印時,呼叫物件的toString 方法。
容器中,兩個物件是否相等是否重複,看他們是否equals, 需要重寫根基類Object的equals方法,因為兩個物件的引用要想相等太難了,是不可能相等的。
重寫自定義類的equals方法,必須重寫hascode方法,因為 hascode 方法,相當於鍵值對裡面的index, 一個index, 只能對應唯一的一個值,不能對應多於一個的值。 通過物件的hascode可以找到物件的實體地址,就能找到物件
如果兩個物件互相equals,那麼兩個物件的hashcode 值一定相等
當一個物件被當做鍵值對中的鍵(索引) 來使用的時候,會使用hashcode方法; 因為呼叫這個物件的hashcode 方法,拿到hashcode值,再去找 這個物件對應的值 效率 會高, 比你把所有的物件都拿出來,挨個的做比較(看他們是否equals),效率會高很多,雜湊code 就是一個int數啊,快啊
Object類中的hashcode方法 是返回這個物件的hascode 值,是一個整數,當我們需要重寫時,可以簡單寫成物件的某個字串屬性的 hashcode方法
容器類物件 在呼叫remove(),contains方法時,需要比較物件是否相等,涉及到物件型別的equals() 和 hashcode()方法;對於自定義的型別,需要重寫equals和 hashcode 方法以實現自定義的物件相等規則,注意相等的物件應該具有相等的hash code
通過hashcode可以找到物件在記憶體裡面的地址,但不是實體地址
陣列是容器,set, list, map,一共四種都是jdk提供的容器,容器在jiavaa 中是以介面來定義的, 然後有幾個實現這個介面的實現類,ArrayList , LinkedList, HashSet, HashMap, 這四種類,用這幾種類的物件來裝東西
Interitor 是統一的遍歷java所有容器的一種方法,一個方法,統一的方法
iteritor在迴圈遍歷過程中會對容器進行鎖定,別人不能動,因此只能用iterator的remove方法不能用容器自身的iteritor方法,現在容器自身不能動
Set 無序,不能重複。沒有新增新的方法
List 有順序,可以重複,提供了一些方法 根據位置 存取元素
Object get(int index);
Object set(int index,Object element ) , 返回來的是,原來index位置上的元素
Void add(int index, Object) 在第幾個位置上新增。。 原來這個位置上的元素以及之後的元素都被向後順移一個位置。
Object remove(int index);
int indexOf(Object o);
int lastIndexOf(Object o);
在第幾個位置上新增,獲取第幾個位置上的元素,設定第幾個位置上的元素,刪除第幾個位置上的元素,某個元素所在的位置是多少,最後一次出現的位置是多少
一個類的物件之間比較大小的方式,排序的方式
改寫name類讓他能實現排序
Comparable 介面定義了一個類的2個物件之間互相怎麼比較大小
Map<> 鍵值對 中的鍵不能重複,重複指的是兩個物件(鍵)不能equals,
拿出每個物件的hashcode來比較,比拿出來兩個物件來比較是否equal快一些。
map規定了,鍵值對必須都是物件。
容器裡面裝的也都是物件吧? 是的,集合規定,所有裝進去的東西都被當做物件,取出來時都需要強制轉型