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

自定義對象作為Properties的鍵進行中文排序的算法實現研究

2013-03-20 07:18:50馬會成
科技視界 2013年10期
關鍵詞:排序方法

馬會成

(1.寧夏職業技術學院,寧夏 銀川750002;2.寧夏廣播電視大學,寧夏銀川750002)

1 properties概述

在java.util數據包里有一個 Properties類,它是JAVA集合類中的一個保存數據的類,通常用于處理軟件項目中的配置文件,Properties對象中的每一個數據保存的是一個鍵值對,鍵和值是一一對應關系,而且鍵必須是唯一的,否則就會發生數據覆蓋,也就是說,如果鍵出現了重復,那么后保存的數據就會覆蓋以前保存的相同鍵對應的數據。

Properties類能夠處理數據項對應的屬性,而且它具有持久性,屬性的每個鍵和值可以是自定義對象,也可以是字符串,但更常見的是字符串,它既可以保存在流中也可以從流中加載,既可以在一個屬性列表中設定它的“默認值”,也可以讓另一個屬性列表作為它的“默認值”,Properties類的自動同步功能和 它的setProperty方法提供的處理字符串的安全性,這些方便的功能使得在軟件項目中得到了越來越多的應用。

需要注意的是,由于Properties類是從Hashtable繼承而來,因而可以對Properties的對象應用Hashtable中的put和putAll方法,但是不建議使用put和putAll方法,因為它們允許調用者插入其鍵或值不是 String的項,這將導致軟件和項目的安全性受到影響,建議使用setProperty方法。如果要使用Properties中的store、propertyNames、save、list方法,那么Properties對象中屬性必須是String類型的鍵和值。

Properties類雖然支持中文排序,但是它的局限性在于需要開發人員自行設計算法,并手工完成一些代碼,而且它沒有提供對自定義對象的排序算法及其實現,將自定義對象作為Properties的鍵進行中文排序的算法,將會使得Properties類的方便性和實用性得到進一步的擴展。

Properties類還有一種局限,那就是它既沒有提供按指定的屬性對自定義對象進行排序的算法,也沒有提供可以直接對自定義對象進行排序的具體實現,因而,Properties類按指定的屬性對自定義對象進行排序的相關算法及其實現,將使Properties類的功能得到進一步發展和完善。

2 自定義對象作為Properties的鍵進行中文排序的算法實現研究

自定義對象作為Properties的鍵按鍵進行排序時,可以使用自定義對象的某個屬性值作為Properties的鍵,也可以使用將整個自定義對象作為Properties的鍵,而且通常排序還有正向排序和反向排序之分,排序字符串也有中文和英文之分,現將自定義對象作為Properties的鍵進行中文排序的算法概述如下:

2.1 將自定義對象中用于排序的屬性作為Properties的鍵,并對鍵按中文正向進行排序

如果你只關心一個自定義對象的一個屬性或者值并對其使用排序,且用于排序的屬性不會重復,那么可以將該屬性用于Properties的鍵,如果屬性值重復,那么后出現的屬性值將覆蓋前面的出現的屬性值,而不用將整個自定義對象保存到Properties中,比如,有一個學生類,其中的學號不可能重復,所以學號可以做為Properties的鍵,并可以按學號進行排序,基本實現算法如下:

①由于是自定義對象的排序,所以首先要有一個類,這樣才能生成自定義對象,比如學生類,在類中提供學號、姓名等屬性。

②由于是對自定義對象的屬性進行排序,所以需要先寫一個類CollatorComparator,且該類要實現Comparator接口。在該類中要提供一個方法compare,用于處理自定義對象中按指定的屬性進行排序。

③用自定義類生成自定義對象,并進行初始化,然后用Properties類生成一個對象defList,并用生成的對象defList通過setProperty方法將自定義對象的屬性作為鍵和值對defList進行初始化。注意,這里排序關鍵字不能重復,如果重復,將覆蓋前面的有相同屬性的對象,除非預知此結果,否則請不要使用此種覆蓋。

④用上面自己寫的類CollatorComparator生成一個對象的實例comparator。

⑤用new ArrayList(defList.entrySet())生成一個實例,并保存到List類的對象list1中。

⑥用 Collections.sort(list1,comparator);實現對對象 list1按comparator的規則進行排序。

⑦用List類的對象list1調用iterator(),并保存到Iterator類的對象i中。

⑧然后用一個循環處理Properties的鍵和值,這里要注意鍵和值的對應關系,可以使用i.next()得到下一個鍵,并轉換成Map.Entry的類的對象,同時保存到Map.Entry的對象me中,這樣me.getKey()保存的就是Properties的當前正在處理的鍵,而me.getValue()就是對應鍵的值。

上面在Properties中保存的都是對象的部分值,這樣是為了方便按鍵的排序,如果想在Properties中保存完整的對象,那么就可以按對象的任何一個屬性進行排序。

2.2 將整個自定義對象作為Properties的鍵,并對鍵按指定的屬性進行中文正向排序

將自定義對象中用于排序的屬性作為Properties的鍵,往往存在著屬性值的重復問題,為了解決這個問題,可以將整個自定義對象作為Properties的鍵,這樣只要自定義對象不同,不管他們用于排序的屬性值是否相同,都可以將自定義對象作為Properties的鍵,并可以按需要的屬性進行排序,但是需要注意的是,如果自定義對象相同,那么后出現的對象將覆蓋前面出現過的對象。這種方案比較器兩個參數的類型常有兩種:Object和Map.Entry型,這里先看Object型。

●比較器兩個參數的類型使用Object型,基本實現算法如下:

①由于是自定義對象的排序,所以首先要有一個類,這樣才能生成自定義對象,比如Person類,在類中提供年齡、姓名等屬性。

②由于是將整個自定義對象作為Properties的鍵,而且只是對自定義對象的屬性進行排序,所以需要先寫一個類CollatorComparator,且該類要實現Comparator接口。在該類中要提供一個方法compare,用于處理自定義對象中按指定的屬性進行排序,該類的主要代碼如下:

Collator collator=(RuleBasedCollator)java.text.Collator.getInstance (java.util.Locale.CHINA);

注意,上面的代碼由于用了toString(),所以什么類型都可以比較如int型。使用此法時,如果不區分大小寫,只需要在這兩個toString()后加上.toLowerCase(),或者用.toUpperCase()。如果要反向排序,只需要在key1前加負號。

③用自定義類生成自定義對象,并進行初始化,然后用Properties類生成一個對象defList,并用生成的對象defList通過put方法將自定義對象的屬性作為鍵和值對defList進行初始化。注意,這里排序關鍵字的值可以重復,而且只要自定義對象不重復,即使排序屬性值重復也不存在導致覆蓋的問題。

④用上面自己寫的類 CollatorComparator一個對象的實例comparator。

⑤用Properties類生成的對象defList調用keySet()中的toArray()方法,并保存到Object型的數組key中。

⑥用Arrays.sort(key,comparator)對數組key按comparator規則進行排序。

⑦然后用一個循環處理Properties的鍵和值,這里要注意鍵和值的對應關系,(Person)key[i]保存的就是Properties的當前正在處理的鍵,而defList.get(key[i])就是對應鍵的值。

上面的方法在比較器的參數是兩個Object直接轉換成Person對象,這就要求比較時將比較器用于裝有Person對象的容器,這只是方法中的一種.

當然我們也可以將比較器的兩個參數的Object轉換成Properties操作需要的Map.Entry型,這就要求比較時將比較器用于裝有鍵值的Properties對象,然后對person類的屬性name進行排序(包括中英文)。

●比較器兩個參數的類型使用Map.Entry型,基本實現算法如下:

①由于是自定義對象的排序,所以首先要有一個類,這樣才能生成自定義對象,比如Person類,在類中提供年齡、姓名等屬性。

②由于是將整個自定義對象作為Properties的鍵,而且只是對自定義對象的屬性進行排序,所以需要先寫一個類CollatorComparator,且該類要實現Comparator接口。在該類中要提供一個方法compare,用于處理自定義對象中按指定的屬性進行排序,該類的主要代碼如下:

Collator collator=(RuleBasedCollator)java.text.Collator.getInstance (java.util.Locale.CHINA);

注意,上面的代碼由于用了toString(),所以什么類型都可以比較如int型。使用此法時,如果不區分大小寫,只需要在這兩個toString()后加上.toLowerCase(),或者用.toUpperCase()。如果要反向排序,只需要在key1前加負號。

③用自定義類生成自定義對象,并進行初始化,然后用Properties類生成一個對象defList,并用生成的對象defList通過put方法將自定義對象的屬性作為鍵和值對defList進行初始化。注意,這里排序關鍵字的值可以重復,而且只要自定義對象不重復,即使排序屬性值重復也不存在導致覆蓋的問題。

④用上面自己寫的類 CollatorComparator一個對象的實例comparator。

⑤用new ArrayList(defList.entrySet())生成一個實例,并保存到List類的對象list1中。

⑥用 Collections.sort(list1,comparator);;實現對對象 list1按comparator的規則進行排序。

⑦用List類的對象list1調用iterator(),并保存到Iterator類的對象i中。

⑧然后用一個循環處理Properties的鍵和值,這里要注意鍵和值的對應關系,可以使用i.next()得到下一個鍵,并轉換成Map.Entry的類的對象,同時保存到Map.Entry的對象me中,這樣(Person)me.getKey()保存的就是Properties的當前正在處理的鍵即整個自定義對象,而me. getValue()就是對應鍵的值。

在實際使用中,將自定義對象作為Properties的值的情況更為常見,因為自定義對象作為Properties的鍵時,如果自定義對象相同,會有覆蓋的情況,而做為值就不會出現覆蓋的情況,而且用值時對其中的相關屬性排序時控制更方便。

[1][美]Robert Lafore.Java數據結構和算法[M].

[2]sun公司官方網站.JDK幫助文檔[OL].

猜你喜歡
排序方法
排排序
排序不等式
恐怖排序
學習方法
節日排序
刻舟求劍
兒童繪本(2018年5期)2018-04-12 16:45:32
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
主站蜘蛛池模板: 亚洲中文在线看视频一区| 欧美福利在线观看| 国产成人精品男人的天堂下载| 在线观看精品国产入口| 四虎在线观看视频高清无码| 在线看免费无码av天堂的| 99福利视频导航| 精品少妇人妻一区二区| av大片在线无码免费| 成人av手机在线观看| 亚洲第一极品精品无码| 国产成人精品第一区二区| 久久青草热| 无码专区在线观看| 日韩毛片在线播放| 亚洲另类色| 久久综合结合久久狠狠狠97色| 国产91丝袜| 成人午夜视频网站| 国产91色| 丰满的熟女一区二区三区l| 日韩黄色在线| 中文字幕在线日韩91| 少妇精品网站| 国产福利2021最新在线观看| 91久久偷偷做嫩草影院电| 四虎永久免费在线| 992tv国产人成在线观看| 又黄又爽视频好爽视频| 欧美亚洲香蕉| 国产成人综合久久精品尤物| 欧美一级高清视频在线播放| 中文字幕乱码中文乱码51精品| 成人av专区精品无码国产| 久久一本精品久久久ー99| 99伊人精品| 午夜免费视频网站| 亚洲男人天堂2018| 国产精品第页| 亚洲视频欧美不卡| 黄色网页在线播放| 亚洲天堂久久| 国产不卡一级毛片视频| 日本三区视频| 精品无码一区二区三区电影| 日本妇乱子伦视频| 亚洲精品制服丝袜二区| 9啪在线视频| 亚洲美女视频一区| 欧美一级黄色影院| 亚洲看片网| 亚洲综合狠狠| 色综合天天视频在线观看| 亚洲男人的天堂网| 国产欧美日韩一区二区视频在线| 亚洲精品黄| 毛片免费观看视频| 亚洲成人黄色在线观看| 无码'专区第一页| 欧美第一页在线| 婷婷丁香色| 午夜国产在线观看| 色首页AV在线| 欧美综合成人| 国产裸舞福利在线视频合集| 凹凸国产分类在线观看| 久久国产精品娇妻素人| 97精品国产高清久久久久蜜芽| 国产网友愉拍精品| 欧美.成人.综合在线| 国产精品视频免费网站| 一级成人欧美一区在线观看 | 精品無碼一區在線觀看 | 无码精品福利一区二区三区| 毛片视频网| 亚洲日韩国产精品无码专区| 色国产视频| 日韩精品中文字幕一区三区| 国产视频 第一页| 亚洲性网站| 亚洲欧洲天堂色AV| 特级aaaaaaaaa毛片免费视频|