java中的集合類(lèi): Java集合類(lèi)提供了一套設計良好的支持對一組對象進(jìn)行操作的接口和類(lèi)。Java集合類(lèi)里面最基本的接口有: · Collection:代表一組對象,每一個(gè)對象都是它的子元素。 · Set:不包含重復元素的Collection。 · List:有順序的collection,并且可以包含重復元素。 · Map:可以把鍵(key)映射到值(value)的對象,鍵不能重復。 .數組(Array)和列表(ArrayList)有什么區別?什么時(shí)候應該使用Array而不是ArrayList? 下面列出了Array和ArrayList的不同點(diǎn): · Array可以包含基本類(lèi)型和對象類(lèi)型,ArrayList只能包含對象類(lèi)型。 · Array大小是固定的,ArrayList的大小是動(dòng)態(tài)變化的。 · ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。 · 對于基本類(lèi)型數據,集合使用自動(dòng)裝箱來(lái)減少編碼工作量。但是,當處理固定大小的基本數據類(lèi)型的時(shí)候,這種方式相對比較慢。 ArrayList和LinkedList有什么區別? ArrayList和LinkedList都實(shí)現了List接口,他們有以下的不同點(diǎn): · ArrayList是基于索引的數據接口,它的底層是數組。它可以以O(1)時(shí)間復雜度對元素進(jìn)行隨機訪(fǎng)問(wèn)。與此對應,LinkedList是以元素列表的形式存儲它的數據,每一個(gè)元素都和它的前一個(gè)和后一個(gè)元素鏈接在一起,在這種情況下,查找某個(gè)元素的時(shí)間復雜度是O(n)。 · · 相對于ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當元素被添加到集合任意位置的時(shí)候,不需要像數組那樣重新計算大小或者是更新索引。 · · LinkedList比ArrayList更占內存,因為L(cháng)inkedList為每一個(gè)節點(diǎn)存儲了兩個(gè)引用,一個(gè)指向前一個(gè)元素,一個(gè)指向下一個(gè)元素。 · · HashSet和TreeSet有什么區別? · · · HashSet是由一個(gè)hash表來(lái)實(shí)現的,因此,它的元素是無(wú)序的。add(),remove(),contains()方法的時(shí)間復雜度是O(1)。 · 另一方面,TreeSet是由一個(gè)樹(shù)形的結構來(lái)實(shí)現的,它里面的元素是有序的。因此,add(),remove(),contains()方法的時(shí)間復雜度是O(logn)。 · · Comparable和Comparator接口是干什么的?列出它們的區別。 Java提供了只包含一個(gè)compareTo()方法的Comparable接口。這個(gè)方法可以個(gè)給兩個(gè)對象排序。具體來(lái)說(shuō),它返回負數,0,正數來(lái)表明輸入對象小于,等于,大于已經(jīng)存在的對象。 Java提供了包含compare()和equals()兩個(gè)方法的Comparator接口。compare()方法用來(lái)給兩個(gè)輸入參數排序,返回負數,0,正數表明第一個(gè)參數是小于,等于,大于第二個(gè)參數。equals()方法需要一個(gè)對象作為參數,它用來(lái)決定輸入參數是否和comparator相等。只有當輸入參數也是一個(gè)comparator并且輸入參數和當前comparator的排序結果是相同的時(shí)候,這個(gè)方法才返回true。
|