999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺談Java中基于集合的應用類的教學設計

2019-11-11 13:14:38徐秀勤
電腦知識與技術 2019年27期
關鍵詞:方法

徐秀勤

摘要:本文基于集合學習,介紹如何設計一個比較完善的應用類。通過HashSet介紹了在應用類中添加equals0方法和hashCode()方法,通過TreeSa介紹了應用類需要實現Comparable接口并實現繼承的compareTo()方法。

關鍵詞:集合;類;教學設計

中圖分類號:G642 文獻標識碼:A

文章編號:1009-3044(2019)27-0087-02

集合(Set)是Java中一個很重要的可以用來存儲和處理無重復元素的高效的數據結構。比如說可以存儲和處理一個單位的部門名稱,存儲和處理一個國家的省城名稱,或者奧運會時參賽國家的名稱等,這幾個信息的處理都是要求不可重復的。那么在實際應用中,使用集合存儲和處理相關問題時,應該如何設計這個應用類,確保其元素不可重復存儲呢?

1集合Set

集合Set是一個接口,它繼承了Collection接口中所有的方法。Set接口本身不能實例化,但是可以作為類型使用,只是規定其實例不能包含重復的元素。在一個集合中,當要添加一個新元素時,要先判斷這個元素的散列碼(hashcode值)在原集合的哈希表中是否存在。如果不存在,則新元素可以立即加入;如果存在,則再檢查equals()方法,即新元素通過調用其自身的equals()方法,跟原集合中所有的元素都進行比較,如果存在結果為true的情況,則新元素不能加入,否則新元素可以加入。

Set有三個實現的具體的子類,分別是HashSet、Hnked-HashSet和TreeSet,這三個類也是必須確保不能向集合中添加重復的元素。關于集合的操作與訪問是集合教學的一個重要方面,但是本文限于篇幅不作特別介紹。

2散列集HashSet

HashSet是一個實現了Set接口的散列集,可以使用它的無參構造方法來創建空的散列集,也可以由一個現有的集合來創建一個散列集。HashSet類的實例用來存儲互不相同的任何元素,但允許null元素。該集合的元素是無序的、高效率的。在教學過程中,為讓學生理解這個特點,會創建一個HashSet實例,存放一些字符串對象并輸出集合,具體見【示例1】。

【示例1】主要代碼如下:

Set set=Hew HashSet();//創建一個空集合,可以放任何對象

set.add(”南京“)//將字符串對象“南京”存人集合set中

set.add(”南京”);//這個“南京”不會重復存入集合中;

set.add(“Nanjing”);//將字符串對象“Nanjing”存人集合set中

set.add(“nanjing”);//將字符串對象“nanjing”存人集合set中,注意與“Nanjing”不同

setl.add(12);//12會被包裝成對象存入集合set中,

svstem.out.println(setl;//輸出集合set中所有元素

上述程序代碼最終運行結果顯示集合中只有“南京、Nan-jing、nanjing、12”這四個元素。多次運行,會發現次序有變化,但是元素不變。能達到這效果的原因是,String類已經重寫了equal()方法與hashCode()方法,排除了重復的元素。

那么如果集合set中存儲圓類對象,能確保不重復嗎?首先設計【示例2】圓類如下:

class Circle{

private double r;

Circle(double r){this.r=r;}

//省略r的get、set方法與求面積與周長等其他方法;

pubhc String toString0{return”r=”+r;}//重寫這個方法,顯示圓對象信息

}

在【示例1】的最后輸出語句之前添加兩行相同的代碼"set.add(new Cirlce(5));”

重新運行【示例1】程序,會發現輸出的集合元素中會出現兩個“r=5.0”:

為避免上述問題,需要改寫【示例2】的Cidce類,重寫equals()方法與hashCode()方法。在講授這個集合內容之前,學生已經掌握了如何正確寫出Circle類的equals方法。由此可以先讓學生在Cirlce類中正確添加equals()方法后,再次運行【示例1】,發現兩個半徑為5的圓依然存在。說明一個類僅僅重寫equals()方法是不夠的,必須還要重寫hashCode()方法。該方法原型如下:

public int hashCode(){}

hashCode()方法其實就是要求返回一個整型的散列碼(hashCode值)。要求相同對象的散列碼一樣即可,意味著不相同的元素的散列碼可以一樣也可以不一樣。對于一個由半徑值來描述圓的對象,半徑相同其散列碼相同即可。那么直接將半徑取整返回即可,hashCode()方法代碼如下:

pubhc im hashCode(){return(inI)r;}

上述代碼表示,假如圓半徑的整數部分相同,則它們的散列碼相同,在集合中會再去處理equals方法,才能判斷它們究竟算不算相同的對象。例如半徑為5.00000-5.99999,它們的散列碼都是5。如果圓半徑精度要求達到4位小數,那么為了提高效率,可以考慮把半徑值擴大后再取整返回即可,修改代碼如下:

public im hashCode(){return(inI)(r*10000);}

當然還有其他方法,可以利用String類中已經實現的hash-Code()方法,把double類型的r轉換成String類型,則可以直接調用其本身的hashCodeO方法即可。因此Circle類中的hashCode()方法還可以修改如下:

public int hashCode0{return(r+””).hashCode();J

在教學過程中發現,學生重寫某個類的hashCode方法總是不知如何下手,其實只要確保某元素重要屬性值相同,其散列碼相同即可。想辦法把類中描述元素的重要屬性值轉換成整型數據返回或轉換成字符串調用其hashCode()方法返回即可,非常簡單。

3鏈式集合LinkedHashSet

LinkedHashSet是HashSet的子類,它支持集合內的元素是有序的,不過這個次序是按照集合添加元素的次序的方式排序的。復制【示例1】得到【示例3】,并修改第一行代碼:

Set set=new LinkedHashSet();

其余代碼不變,運行【示例3】,多次運行,發現輸出的集合中的元素沒有重復,且與添加的順序一致,這個特點學生還是比較容易理解并接受的。

4樹形集合TreeSet

Set接口的一個子接口SortedSet可以確保集合中的元素是有序的。TreeSet實現了SortedSet接口,通過無參構造方法可以創建一個空的TreeSet對象。只要對象是可以比較的,就可以將它們添加到一個TreeSet對象中。先設計一個只能添加字符串對象的TreeSet對象,讓學生理解TreeSet與HashSet的不同特點。

【示例4】主要代碼如下:

Setset=new TreeSet();//考慮集合只能存人String對象

set.add("naniing");

在實際應用中,如果需要用集合來存儲和處理對象,則該對象的原類除了包含正常封裝的數據成員,一些必要的業務處理的方法外,還需要重寫hashCode()和equals()方法;如果業務上還要求需要有序存儲,那么對象的原類還必須實現compara-ble接口,實現從接口繼承的compareTo()方法。通過集合基本特點的介紹,希望大家對如何設計一個相對比較完善的應用類能有所幫助。

【通聯編輯:光文玲】

猜你喜歡
方法
中醫特有的急救方法
中老年保健(2021年9期)2021-08-24 03:52:04
高中數學教學改革的方法
河北畫報(2021年2期)2021-05-25 02:07:46
化學反應多變幻 “虛擬”方法幫大忙
變快的方法
兒童繪本(2020年5期)2020-04-07 17:46:30
學習方法
可能是方法不對
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
最有效的簡單方法
山東青年(2016年1期)2016-02-28 14:25:23
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
主站蜘蛛池模板: 一级福利视频| 亚洲色图欧美视频| 激情六月丁香婷婷四房播| 高清亚洲欧美在线看| 高清不卡一区二区三区香蕉| 无码高清专区| 毛片网站在线看| 高潮毛片免费观看| 国产成人乱无码视频| 亚洲91精品视频| 99一级毛片| 视频国产精品丝袜第一页| 国产精品天干天干在线观看 | 国产精品漂亮美女在线观看| 国产精品第| 国产精品成| 制服丝袜国产精品| 欧美第二区| 爱色欧美亚洲综合图区| 午夜电影在线观看国产1区| 国产在线自揄拍揄视频网站| 自拍偷拍欧美| 99九九成人免费视频精品| 欧美亚洲一区二区三区在线| 婷婷丁香在线观看| 九九九精品成人免费视频7| 国产玖玖玖精品视频| 欧美伊人色综合久久天天| 欧美人人干| 亚洲午夜国产片在线观看| 国产精品无码AV中文| 五月婷婷丁香色| 国产一区三区二区中文在线| 免费一级无码在线网站| 日本人又色又爽的视频| 综合色区亚洲熟妇在线| 国产女同自拍视频| 成人精品在线观看| 免费a在线观看播放| 日韩欧美国产精品| 亚洲国产中文在线二区三区免| 久久国产V一级毛多内射| 宅男噜噜噜66国产在线观看| 91九色视频网| 国产日本欧美亚洲精品视| 国产农村妇女精品一二区| 视频在线观看一区二区| 国产精品一区在线麻豆| 日韩av无码精品专区| 97综合久久| 全免费a级毛片免费看不卡| 欧美精品亚洲日韩a| 精品免费在线视频| 亚洲黄网在线| 九月婷婷亚洲综合在线| 青青青国产视频手机| 国产永久在线观看| 国产91无毒不卡在线观看| 女同国产精品一区二区| 欧美日韩在线国产| 亚洲天堂网视频| 在线看片免费人成视久网下载| 国产麻豆精品在线观看| 欧美一区二区丝袜高跟鞋| 亚洲精品无码AV电影在线播放| 五月天天天色| 四虎成人精品在永久免费| 扒开粉嫩的小缝隙喷白浆视频| 日韩一级毛一欧美一国产| 日韩免费毛片| 97在线碰| 日韩人妻无码制服丝袜视频| 久久精品中文字幕免费| 久久99国产乱子伦精品免| 丁香五月激情图片| 亚洲欧美在线看片AI| 青青热久麻豆精品视频在线观看| 国产成人综合久久精品下载| 国产精品久线在线观看| 久草热视频在线| 666精品国产精品亚洲| 午夜性爽视频男人的天堂|