java 容器

容器,無非就是裝其它東西的,數組,列表都是一種容器,下面先來看一下java中容器api的類圖結構


左邊的都是需要我們一個一個的向其中插入數據,但是右邊的map就不同了,我們需要向裏面插入數據的時候,我們要做的是一對一對的想裏面插入。左邊是一個Collection接口,在裏面定義了一個個的方法,在它的下面有兩個子集合,Set類似於我們數學中的集合,是不可以重複的,而且是沒有順序的,右邊的是List是可以重複的,而且是有順序的。我們可以看到在下面還有好多類實現了上面的接口,來幫助我們完成一些任務。

Collection c = new ArrayList ();
c.add("dgfd");

在使用容器的時候,我們可以定義一個父接口,然後讓其指向一個子類,這樣的話,當不想讓c指向其它的容器的時候,我們換一下就好了,但是此時的定義我們是無法調用子類所特有的方法。而且在其中我們可以放入不同的類型的數據。

Collection c = new ArrayList ();
c.add(new Integer(1));
c.add(new Name ("java"));
c.remove(new Integer(1));
c.remove(new Name("java"));
當這段代碼被執行的時候,我們會發現,第二個插入的java未被刪除,這是什麼原因呢,原因就是我們在執行remove和contiant方法的時候,我們都是通過equals方法,和hashcode這兩個方法來進行的,所以當兩個自定義類型對象在進行比較的時候,我們需要重寫這兩個方法,來實現對其相等的判別,HashCode並不是必須要用的,只有當我們的對象被當做索引來使用的時候,我們需要的是對其hashcode進行判斷。

ArrayList和LinkList在性能上的區別:

底層的實現方式是不同的,ArrayList是通過動態數組來實現的,用的數據結構是順序表,所以說當我們用它來執行一些根據位置查找指定元素的時候,效率會比較高的,但是當我們再執行刪除,添加操作的時候會比較麻煩的,但是對於LinkList,它是通過鏈表的形式來實現的,通過這個我們可以高效率的是對於其中元素的插入和刪除操作,只是去改變一下它的指向就好了,但是對於查找的時候效率就會比較低了,因爲要從鏈表的第一個元素開始遍歷,一個一個的向下遍歷。對於具體的實現,準備期中考試之後,用java將這些數據結構都實現一下。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章