成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么要使用集合框架?

開發 后端
題序:很多時候,我們專心研究一個東西的時候,往往忘記了我們最初的目的是什么。

題序:很多時候,我們專心研究一個東西的時候,往往忘記了我們最初的目的是什么。

曾經研究過那么久的Java集合框架,為了搞清里面的細節,甚至都跑去重新買了一本數據結構,終于知道了線性表,知道了樹,知道了查找表。也自己動手實現了ArrayList,LinkedList,HashMap等。

今天在公交車上,突然想到“我們為什么要使用Java集合框架呢?”竟然一時語塞,半天想不起來,也說不出個所以然呢。頓時悲從中來啊。還是決定再次好好復習一把,現總結如下:

PS.還是那句老話,如果這些問題您都能輕松解答,沒必要再浪費時間看下去了。

Question one:我們為什么要使用集合框架?

Question two:關于ArrayList 和Vector (HashMap和HashTable)PS

Question three:總體把握,集合框架的繼承圖

Question four:set 于map的關系(見李興華書)

Question five:關于set(底層實現,關于TreeSet,關于排序,關于比較對象相等)

Question six: 已經存在了那么多的動態結構,為什么需要hash表?

Question seven:TreeMap 底層實現

Question One:我們為什么使用集合框架?

大家還記得我們為什么要使用數組嘛?

當我們需要保持一組一樣(類型相同)的元素的時候,我們應該使用一個容器來保存,數組就是這樣一個容器。

那么,數組的缺點是什么呢?

數組一旦定義,長度將不能再變化。

然而在我們的開發實踐中,經常需要保存一些變長的數據集合,于是,我們需要一些能夠動態增長長度的容器來保存我們的數據。

而我們需要對數據的保存的邏輯可能各種各樣,于是就有了各種各樣的數據結構。我們將數據結構在Java中實現,于是就有了我們的集合框架。

Question Two: List和Vector,HashMap和 HashTable 的區別在哪里呢?

前者都是在JDK1.2后推出的,在前者中,因為采用異步處理方式,性能更高。

(其實就是刪掉了后者中操作數據{add ,remove等}時的線程同步鎖,這樣,效率更高了,但是卻不再是線程安全的了,要線程安全,必須用戶在程序中使用時自己控制。)

Question Three:集合框架繼承圖

本來想自己畫個簡圖的,結果悲催的Rational Rose一直在抽風,也沒時間去弄那個了。就網上Down了一個,暫且用著吧

 

 

從這個圖中,我們可以發現:Collection 接口包括List和Set兩個子接口(其實還有Queue和Sorted兩個子接口)

另外,也驗證了我們前面說的,Array和Collection都是用來保存數據的容器。

Question Four:Set 和 Map 有什么關系?

從Question Three的繼承圖中,我們很明顯的發現:Map雖然不像Set那樣屬 于 Collection,但是Set和Map的繼承圖是如此的相似。那么,他們之間到底有什么樣的 關系呢?

從邏輯上來說:首先,如果我們只考察Map中的key,那么顯然,這個key的集合就是一 個set:不能重復,無序。(Map中有keyset()的方法,能直接得到key的set)另外一 個層面,如果我們 將Map中的key何value當做一個整體,那么,顯然,這個時候 的Map其實就是一個Set(在Map的實現中,都是通過一個內部類來將key和value當做 一個整體entity),

從代碼角度本身角度來看,無論是HashSet還是TreeSet其實使用的都是對應 的Tree來實現的,我們用一個默認的Object,這樣就可以存了。

而事實上Set的底層實現中,我們也可以發現,都是用對應的Map來實現的,只是,在每次存key-value 對的時候,都默認給了一個Object 類作為Value的默認值,

Question five:關于set(底層實現,關于TreeSet,關于排序,關于比較對象相等)

我們知道,Set是無序的,同時又是不能重復的,那么,這種不能重復性,是如何保證的呢? 其實這個問題問的還是不到位,Question Four已經說了,底層是由Map實現的,那么都是由Map來實現的。

為了唯一性,重點是能識別相同的元素(如何判斷相等)

在Java中,=號,表示內存地址相等,即是指向堆內存的同一引用,那么此時,顯然兩個元素是相等的。

當不是指向堆內存的同一引用時。我們就需要重寫Object類的equals()方法了。在此,我們判斷,如果我們需要比較的各個屬性相等的話,那么則可認為這兩個對象相等(關于屬性相等的比較與此類似)

Question six: 已經存在了那么多的動態結構,為什么需要Hash表?

其實這個問題其實問的不恰當,應該是,有了諸如順序表和有序表這樣的靜態表,諸如二叉排序樹 平衡二叉樹這樣的動態表,為什么還需要Hash表呢?

因為記錄在表中的位置和它的關鍵字之間不存在一個確定的關系。查找的過程為給定值依次和關鍵字集合中各個關鍵字進行比較。查找的效率取決于和給定值進行比較的關鍵字個數。

Question Seven: TreeMap 底層實現

TreeMap 底層由紅黑樹(Red-Black tree)實現。因為此部分內容包括算法分析,具體代碼實現以及性能分析,內容比較多,所以本部分內容稍后專門用一個日志來推出。(形式類似HashMap那篇日志)

【編輯推薦】

  1. Red Hat CEO呼吁甲骨文繼續保持Java開放
  2. 自學Javabean迅速成為Java高手
  3. Java通過JNI調用C語言的方法
  4. 高手Java核心技術學習筆記
  5. 成為Java高手需要注意的25個學習目標
責任編輯:金賀 來源: ITEYE博客
相關推薦

2014-11-21 10:50:26

JavaString

2011-03-08 12:59:38

proftpd

2017-07-03 13:33:42

AndroidItemDecorat

2009-08-04 10:39:58

2010-05-11 10:29:06

Unix awk

2014-05-19 15:52:57

Apache StraApache

2014-04-25 10:05:42

OpenStack私有云公共云

2024-01-24 11:24:03

C++編程異常處理

2013-09-27 11:33:57

交換機技術Vlan技術

2012-09-26 10:02:44

框架開發項目

2023-09-21 09:00:00

Merge Que開發工具Mergify

2014-01-03 10:59:34

2023-03-06 08:01:25

structGo語言

2024-01-01 08:57:55

ODBCSqlServer數據庫

2021-12-24 17:01:29

Linux工具系統

2022-04-26 16:56:20

行為數據數據

2020-08-24 07:03:10

物聯網設備RTOS物聯網

2018-05-01 06:43:33

2024-02-20 22:13:49

SQL語句編程

2021-02-18 09:23:47

數據庫分區數據庫倉庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 羞羞视频网站免费看 | 成人精品一区二区 | 国产高清一区二区 | 久久久免费少妇高潮毛片 | 国产视频久久久 | 综合久久综合久久 | 国产精品自拍av | 国产第一页在线观看 | 51ⅴ精品国产91久久久久久 | 日韩欧美中文字幕在线观看 | 自拍偷拍精品 | 成人深夜福利网站 | 91免费观看国产 | 国产婷婷色一区二区三区 | 欧美在线观看一区 | 福利视频日韩 | 亚洲一区二区三区视频 | 91视频导航 | 欧美又大粗又爽又黄大片视频 | 99久久久99久久国产片鸭王 | 国产午夜精品久久久久免费视高清 | 精品久久久久久久人人人人传媒 | 不卡的av一区| 99精品欧美一区二区三区 | 久久精品在线免费视频 | 国产高清精品一区二区三区 | 91精品国产91综合久久蜜臀 | 久久精品国产久精国产 | 国产夜恋视频在线观看 | 一区二区视频在线 | 91精品国产色综合久久不卡98 | 成人在线一区二区 | 亚洲免费网 | 欧美一级片在线播放 | 亚洲精品99 | 久久免费国产 | 做a网站| 在线日韩欧美 | 黄色大全免费看 | 狠狠色狠狠色综合日日92 | 成人精品一区二区 |