1. 程式人生 > 其它 >陣列和集合哪個效率高_Java學習——集合(collection)小結(1)

陣列和集合哪個效率高_Java學習——集合(collection)小結(1)

技術標籤:陣列和集合哪個效率高

1. 為什麼需要集合?

答:陣列就是一種容器,可以在其中放置物件或基本型別資料,但是容量需要事先定義好,不能隨著需求的變化而擴容。基於陣列並不能滿足我們對於“管理和組織資料的需求”,所以我們需要一種更強大、更靈活、容量隨時可擴的容器來裝載我們的物件。集合(Collection)便可以滿足這種要求。

2.Collection、Set、List介面的特徵是什麼?

Collection 介面儲存一組不唯一,無序的物件

List 介面儲存一組不唯一,有序(索引順序)的物件

Set 介面儲存一組唯一,無序的物件

3.ArrayList底層及其特點?

答:ArrayList底層是用陣列實現的儲存。 特點:查詢效率高,增刪效率低,執行緒不安全。我們一般使用它。

4.ArrayList的常用方法有哪些?

add(Object obj)//新增元素

list.size()//容器的大小

list.addAll(Collection c)//把容器c中的所有元素,新增到list中(可重複,有序)

list1.remove( )//根據索引刪除

list1.remove(3);//根據索引刪除

list1.contains("123")//是否包含某個元素

list1.clear();//清空集合中的所有元素物件

list2.get(0)//獲取指定索引位置的物件

list2.set(0, "aadd")//根據索引位置 修改物件

list2.add(2, "tianjia")//指定索引位置 新增對

list2.indexOf("hh")//(10)查詢元素在集合中的位置

List 

5.ArrayList底層擴容易原理是什麼?

答:本質上就是通過定義新的更大的陣列,將舊陣列中的內容拷貝到新陣列,來實現擴容。 ArrayList的Object陣列初始化長度為10,如果我們儲存滿了這個陣列,需要儲存第11個物件,就會定義新的長度更大的陣列,並將原陣列內容和新的元素一起加入到新陣列中,每次擴容是原來的1.5倍 。

17e97a91bf208f9629d7752f812f21eb.png
ArrayList底層原始碼(1)

9b3f560debf4cedc438ffd04ee4d5d1d.png
ArrayList底層原始碼(2)

6.LinkedList知識小結

答:LinkedList底層用雙向連結串列實現的儲存。特點:查詢效率低,增刪效率高,執行緒不安全。雙向連結串列也叫雙鏈表,是連結串列的一種,它的每個資料節點中都有兩個指標,分別指向前一個節點和後一個節點。 所以,從雙向連結串列中的任意一個節點開始,都可以很方便地找到所有點。

LinkedList和ArrayList都實現了介面List所以有很多方法都是一樣的。LinkedList中獨有的幾個方法有:addFirst();addLast(); removeFirst(); removeLast()。

d7e231066fcc8fcf9889894991fdf72e.png
LinkedList的儲存結構圖

7.Vector的簡介

答:Vector底層是用陣列實現的List,相關的方法都加了同步檢查,因此“執行緒安全,效率低”。獨有的方法:addElement();removeElement();

8.Vector和ArrayList區別

答:Vector執行緒安全,效率低;ArrayList執行緒不安全,效率高。

9.Map簡介

答:Map就是用來儲存“鍵(key)-值(value) 對”的。 Map類中儲存的“鍵值對”通過鍵來標識,所以“鍵物件”不能重複。Map 介面的實現類有HashMap、TreeMap、HashTable等。

8baa8d72f112181175454a9807224d2a.png
Map介面中常用的方法
Map

10.HashMap知識小結

答:HashMap採用雜湊演算法實現,是Map介面最常用的實現類。 由於底層採用了雜湊表儲存資料,我們要求鍵不能重複,如果發生重複,新的鍵值對會替換舊的鍵值對。 HashMap在查詢、刪除、修改方面都有非常高的效率。

11.HashMap與HashTable的區別

答:1. HashMap: 執行緒不安全,效率高。允許key或value為null。

2. HashTable: 執行緒安全,效率低。不允許key或value為null。

12.集合的幾種遍歷方法

遍歷集合內容