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