国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于數(shù)據(jù)結(jié)構(gòu)與簡化內(nèi)存模型的Java集合教學(xué)方法研究

2018-06-01 06:47胡建華
計(jì)算機(jī)教育 2018年5期
關(guān)鍵詞:鏈表數(shù)據(jù)結(jié)構(gòu)內(nèi)存

胡建華,鄢 旭

(1.浙江農(nóng)林大學(xué)暨陽學(xué)院 工程技術(shù)系,浙江 諸暨 311800;2.江西旅游商貿(mào)職業(yè)學(xué)院 現(xiàn)代教育技術(shù)中心,江西 南昌 330000)

0 引 言

Java語言課程中,集合框架是學(xué)生反映較難掌握的內(nèi)容之一。該部分提供了很多接口與類,List、ArrayList、LinkedList、HashMap、TreeMap 等,如這些類的區(qū)別在哪里,在什么情況下使用,這些問題時(shí)常困擾著學(xué)生。筆者發(fā)現(xiàn)很少有教材從理論的高度對(duì)Java集合框架進(jìn)行清晰闡述,絕大部分教材只是羅列每個(gè)類的屬性與方法,沒有解釋每個(gè)類的區(qū)別及應(yīng)用場景;少數(shù)教材簡單說明ArrayList、LinkedList的實(shí)現(xiàn)方法不同,但不夠全面,也沒有說明一個(gè)集合對(duì)象保存的并不是元素的內(nèi)容,而只是元素對(duì)象的引用(可以理解為地址)。在多年的Java語言課程教學(xué)中,筆者發(fā)現(xiàn)從數(shù)據(jù)結(jié)構(gòu)理論角度介紹Java集合框架組成,以JVM簡化內(nèi)存模型描述集合對(duì)象的實(shí)現(xiàn),能幫助學(xué)生輕松理解Java集合框架,并靈活應(yīng)用,取得了較好的教學(xué)效果。

1 Java的集合框架就是數(shù)據(jù)結(jié)構(gòu)課程中集合的抽象

要從數(shù)據(jù)結(jié)構(gòu)理論的角度理解Java集合框架,第一步是回顧數(shù)據(jù)結(jié)構(gòu)課程的內(nèi)容。數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計(jì)算問題中數(shù)據(jù)的組織、存儲(chǔ)及操作的學(xué)科。所謂非數(shù)值計(jì)算問題,指不是一個(gè)公式就能解決的問題,比如排序問題等。首先講解數(shù)據(jù)的組織、存儲(chǔ)及操作,見表1。

表1 數(shù)據(jù)的組織、存儲(chǔ)及操作

接著,講解集合、線性結(jié)構(gòu)、線性表、順序表、鏈表的區(qū)別。集合是一批數(shù)據(jù)(可以無序);線性結(jié)構(gòu)把一批數(shù)據(jù)組織起來,除了首元素與尾元素,中間任何一個(gè)元素只有一個(gè)前驅(qū)、一個(gè)后繼。從操作受限的角度看,線性結(jié)構(gòu)可分為線性表、隊(duì)列與棧3種,線性表就是操作不受限的線性結(jié)構(gòu)。從存儲(chǔ)的角度看,順序存儲(chǔ)的線性表叫順序表,鏈?zhǔn)酱鎯?chǔ)的線性表叫鏈表。

最后,引導(dǎo)學(xué)生分析順序表與鏈表在訪問、插入、刪除一個(gè)元素時(shí)的效率區(qū)別。

第二步,講解Java的集合框架組成,見圖1。

明確告訴學(xué)生,Collection接口就是數(shù)據(jù)結(jié)構(gòu)中集合的抽象,該接口提供的方法,就是要完成數(shù)據(jù)結(jié)構(gòu)中集合的常用算法,諸如建立集合、插入元素、刪除元素、集合的交叉并補(bǔ)運(yùn)算等。針對(duì)不同存儲(chǔ)結(jié)構(gòu)有不同的實(shí)現(xiàn)方式,這些方法都是抽象方法,具體由它的子類實(shí)現(xiàn),因此Collection定義成接口。

圖1 Java的集合框架組成

ArrayList類用順序存儲(chǔ)方式實(shí)現(xiàn),ArrayList就是順序表;LinkedList用鏈?zhǔn)酱鎯?chǔ)方式實(shí)現(xiàn),LinkedList就是鏈表;兩者的區(qū)別在于訪問、插入、刪除一個(gè)元素時(shí),效率是不同的。若一個(gè)集合經(jīng)常要插入、刪除元素,則LinkedList效率高。

Set就是在數(shù)據(jù)結(jié)構(gòu)集合的基礎(chǔ)上加了唯一性要求;當(dāng)Map把鍵—值看做一個(gè)整體時(shí),它就是集合,并提供了項(xiàng)集。

進(jìn)一步講解,HashSet、HashMap等是無序集合,TreeSet、TreeMap是通過二叉排序法建立的有序集合。

2 Java集合對(duì)象保存的是集合中每個(gè)元素對(duì)象的引用

也許受到C語言課程中數(shù)組元素分配內(nèi)存空間的影響,很多學(xué)生認(rèn)為集合中保存了元素對(duì)象本身,因此他們不理解一個(gè)對(duì)象加入兩個(gè)集合等問題。一個(gè)集合中刪除了這個(gè)元素對(duì)象,為什么另一個(gè)集合還能顯示這個(gè)對(duì)象呢?所以,Java教學(xué)中,理解Java的內(nèi)存管理是很重要的。Java實(shí)際的內(nèi)存管理比較復(fù)雜,但可以用簡化的方式描述,既便于學(xué)生理解,又不違背Java內(nèi)存管理原則 。可以簡單地把內(nèi)存分為兩部分:類區(qū)與對(duì)象區(qū)。下面用簡化內(nèi)存模型分析一段Java集合代碼。

list使用類中,main方法的簡化內(nèi)存模型分析見圖2。

由圖2可見,張三、令狐沖兩個(gè)學(xué)生對(duì)象是獨(dú)立建立在對(duì)象區(qū)的,jsj.add(xs1)只是通過調(diào)用add方法,把張三這個(gè)學(xué)生對(duì)象的地址加入到集合對(duì)象jsj中。jsj中刪除了一個(gè)學(xué)生對(duì)象,只是刪除了對(duì)這個(gè)對(duì)象的引用,這個(gè)對(duì)象本身還在內(nèi)存中。

圖2 main方法的簡化內(nèi)存模型分析圖

3 結(jié) 語

通過與數(shù)據(jù)結(jié)構(gòu)知識(shí)相結(jié)合,可以用簡化內(nèi)存模型分析集合代碼,幫助學(xué)生輕松掌握J(rèn)ava集合框架的本質(zhì),而不會(huì)迷惘于成堆的接口和類中。學(xué)院2015級(jí)學(xué)生按此方法教學(xué),該門課程平均成績達(dá)到85分,而前一屆學(xué)生未采用這種講課方法,同樣試卷考試,課程平均成績只有70分。由此可見,采用本文這種類比式教學(xué)方法后,教學(xué)效果提高顯著。

[1] 董東. 數(shù)據(jù)結(jié)構(gòu)與Java面向?qū)ο蟪绦蛟O(shè)計(jì)課程之間的有效銜接[J]. 計(jì)算機(jī)教育, 2015(15): 82-84.

[2] 宋晏. 基于知識(shí)邏輯結(jié)構(gòu)與思維形式注記教學(xué)論的Java教學(xué)設(shè)計(jì)[J]. 工業(yè)和信息化教育, 2014(5): 68-74.

猜你喜歡
鏈表數(shù)據(jù)結(jié)構(gòu)內(nèi)存
蒙特卡羅模擬中基于雙向鏈表的元胞鏈表方法
數(shù)據(jù)結(jié)構(gòu)線上線下混合教學(xué)模式探討
重典型應(yīng)用,明結(jié)構(gòu)關(guān)系
如何用鏈表實(shí)現(xiàn)一元多項(xiàng)式相加
為什么會(huì)有“數(shù)據(jù)結(jié)構(gòu)”?
筆記本內(nèi)存已經(jīng)在漲價(jià)了,但幅度不大,升級(jí)擴(kuò)容無須等待
“春夏秋冬”的內(nèi)存
跟麥咭學(xué)編程
內(nèi)存搭配DDR4、DDR3L還是DDR3?
C語言中指針鏈表的學(xué)習(xí)探討
永寿县| 乐安县| 蓬安县| 靖远县| 石棉县| 庐江县| 皮山县| 固镇县| 松滋市| 九龙县| 西青区| 通化市| 江陵县| 吉安市| 化州市| 都江堰市| 施秉县| 东方市| 云阳县| 德钦县| 大关县| 邻水| 浏阳市| 福鼎市| 彩票| 恩平市| 双鸭山市| 湾仔区| 郁南县| 顺平县| 汉阴县| 友谊县| 杂多县| 蚌埠市| 固原市| 依兰县| 夹江县| 麻栗坡县| 兰州市| 加查县| 沅陵县|