1. 程式人生 > >Java 容器類

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規定了,鍵值對必須都是物件。

容器裡面裝的也都是物件吧? 是的,集合規定,所有裝進去的東西都被當做物件,取出來時都需要強制轉型