導航:首頁 > 操作系統 > android資料庫排序

android資料庫排序

發布時間:2023-08-23 11:08:34

android中怎麼把list中內容按a-z排序

PinyinComparator介面用來對ListView中的數據根據A-Z進行排序,前面兩個if判斷主要是將不是以漢字開頭的數據放在後面

package com.example.sortlistview;

import java.util.Comparator;

/**
*
* @author xiaanming
*
*/
public class PinyinComparator implements Comparator<SortModel> {

public int compare(SortModel o1, SortModel o2) {
//這里主要是用來對ListView裡面的數據根據ABCDEFG...來排序
if (o2.getSortLetters().equals("#")) {
return -1;
} else if (o1.getSortLetters().equals("#")) {
return 1;
} else {
return o1.getSortLetters().compareTo(o2.getSortLetters());
}
}
}

Ⅱ Android開發 HashMap如何排序

HashMap排序是數據結構與演算法中常見的一種排序演算法。本文即以Android平台為例來實現該演算法。
具體代碼如下: public static void main(String[] args) { Map<String, Integer> map = new HashMap<String, Integer>(); map.put("lisi", 5); map.put("lisi1", 1); map.put("lisi2", 3); map.put("lisi3", 9); List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>( map.entrySet()); System.out.println("--------------排序前--------------"); for (int i = 0; i < infoIds.size(); i++) { String id = infoIds.get(i).toString(); System.out.println(id); } // 排序 Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() { public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return ( o1.getValue()-o2.getValue()); } }); System.out.println("--------------排序後--------------"); for (int i = 0; i < infoIds.size(); i++) { Entry<String,Integer> ent=infoIds.get(i); System.out.println(ent.getKey()+"="+ent.getValue()); }}

Ⅲ android聯系人排序用了什麼演算法

今天用了整整一下午去搗鼓這塊,為什麼模擬器上可以按拼音排序,中英文混排,及按字母搜索聯系人,但到了開發板(平台是根據android2.2改過的)上就怎麼不行了呢,雖然現在還沒有解決,但也是知道了問題所在,離解決之路也就不遠了
好吧,現在就解釋下android2.2是怎麼按拼音排序的。

首先我們來看下android.2自帶通訊錄的資料庫文件contacts2.db的raw_contacts表。用sqlitedbviewer工具打開後可以看到有這么一個欄位:sort_key(sort_key_alt與之相似,只不過是英文環境下有個按given name還是first name排序的問題)。

正常狀況下,我們新建一個聯系人的話,如果是英文,則sort_key與display_name欄位顯示相同,如果輸入姓名是中文,如「你好」,sort_key則會顯示「ni 你 hao 好」,這樣開發者既可以根據此欄位按拼音排序,中英文混排,以及按拼音搜索聯系人拉。

現在就說下,android是如何將中文名的聯系人轉化為拼音存到sort_key裡面的:

view plain to clipboardprint?
if (displayNameStyle == FullNameStyle.CHINESE ||
displayNameStyle == FullNameStyle.CJK) {
sortKeyPrimary = sortKeyAlternative =
ContactLocaleUtils.getIntanc).getSortKe(displayNamePrimary, displayNameStyle);}
if (displayNameStyle == FullNameStyle.CHINESE ||
displayNameStyle == FullNameStyle.CJK) { sortKeyPrimary =
sortKeyAlternative =
ContactLocaleUtils.getIntanc).getSortKe(displayNamePrimary,
displayNameStyle);}
這段代碼是運行在contactsprovi2.Java的updateRawContactDisplayName()方法裡面,這段代碼我們用到了ContactLocaleUtils.java這個類,所以我們進入它以後最顯眼的就是ChineseContactUtils這個ContactLocaleUtils的子類,它重寫了ContactLocaleUtils的getSortKey()方法,如下:

view plain to clipboardprint?
public String getSortKey(String displayName) {

ArrayList tokens = HanziToPinyin.getInstance().get(displayName);

if (tokens != null && tokens.size() > 0) {

StringBuilder sb = new StringBuilder();

for (Token token : tokens) {

// Put Chinese character's pinyin, then proceed with the

// character itself.

if (Token.PINYIN == token.type) {

if (sb.length() > 0) {

sb.append(' ');

}

sb.append(token.target);

sb.append(' ');

sb.append(token.source);

} else {

if (sb.length() > 0) {

sb.append(' ');

}

sb.append(token.source);

}

}

return sb.toString();

}

return super.getSortKey(displayName);

}
public
String getSortKey(String displayName) {
ArrayList tokens =
HanziToPinyin.getInstance().get(displayName); if (tokens !=
null && tokens.size() > 0) { StringBuilder
sb = new StringBuilder(); for (Token token : tokens) {
// Put Chinese character's pinyin, then proceed
with the // character itself.
if (Token.PINYIN == token.type) { if
(sb.length() > 0) { sb.append(' ');
} sb.append(token.target);
sb.append(' ');
sb.append(token.source); } else {
if (sb.length() > 0) {
sb.append(' '); }
sb.append(token.source); } }
return sb.toString(); } return
super.getSortKey(displayName); }
首先我們看 ArrayList tokens = HanziToPinyin.getInstance().get(displayName);,因為其他的無非就是插入格式的問題,我們暫時不用看。

android如何將漢字轉為拼音的?這就用到了HanziToPinyin這個類,好吧,我們先看下HanziToPinyin的getInstance()方法:

view plain to clipboardprint?
public static HanziToPinyin getInstance() {

synchronized(HanziToPinyin.class) {

if (sInstance != null) {

return sInstance;

}

// Check if zh_CN collation data is available

final Locale locale[] = Collator.getAvailableLocales();

for (int i = 0; i < locale.length; i++) {

if (locale[i].equals(Locale.CHINA)) {

sInstance = new HanziToPinyin(true);

return sInstance;

}

}

Log.w(TAG, "There is no Chinese collator, HanziToPinyin is disabled");

sInstance = new HanziToPinyin(false);

return sInstance;

}

}
public static HanziToPinyin getInstance() {
synchronized(HanziToPinyin.class) { if (sInstance != null) {
return sInstance; } // Check
if zh_CN collation data is available final Locale locale[]
= Collator.getAvailableLocales(); for (int i = 0; i <
locale.length; i++) { if
(locale[i].equals(Locale.CHINA)) { sInstance = new
HanziToPinyin(true); return sInstance;
} } Log.w(TAG, "There is no Chinese
collator, HanziToPinyin is disabled"); sInstance = new
HanziToPinyin(false); return sInstance; } }
現在說下我的開發板為什麼不能轉拼音;就是因為final Locale locale[] = Collator.getAvailableLocales()的Locale沒有一項equals(Locale.CHINA),所以到時候解決了這項,聯系人的按拼音排序也就解決了,如果大家不想用系統自帶的,自己可以下載個pinyin4j.jar包自己實現吧。

好吧,繼續:

看方法名也只到,這個方法返回一個HanziToPinyin實例,我仔細研究了HanziToPinyin的構造方法,無論純如的布爾值是false還是true都不影響,返回的都一樣,只不過這個方法的Log.w(TAG, "There is no Chinese collator, HanziToPinyin is disabled");可以提示是否支持漢字轉拼音,如果不能,android就會將displayname原封不動的插入sort_key裡面,如果能,就是剛才我說的 如「你好」,sort_key則會顯示「ni 你 hao 好」,這種形式,具體的如何轉拼音就是get()方法拉,直接插代碼:

view plain to clipboardprint?
public ArrayList get(final String input) {
ArrayList tokens = new ArrayList();
if (!mHasChinaCollator || TextUtils.isEmpty(input)) {
// return empty tokens.
return tokens;
}
final int inputLength = input.length();
final StringBuilder sb = new StringBuilder();
int tokenType = Token.LATIN;
// Go through the input, create a new token when
// a. Token type changed
// b. Get the Pinyin of current charater.
// c. current character is space.
for (int i = 0; i < inputLength; i++) {
final char character = input.charAt(i);
if (character == ' ') {
if (sb.length() > 0) {
addToken(sb, tokens, tokenType);
}
} else if (character < 256) {
if (tokenType != Token.LATIN && sb.length() > 0) {
addToken(sb, tokens, tokenType);
}
tokenType = Token.LATIN;
sb.append(character);
} else if (character < FIRST_UNIHAN) {
if (tokenType != Token.UNKNOWN && sb.length() > 0) {
addToken(sb, tokens, tokenType);
}
tokenType = Token.UNKNOWN;
sb.append(character);
} else {
Token t = getToken(character);
if (t.type == Token.PINYIN) {
if (sb.length() > 0) {
addToken(sb, tokens, tokenType);
}
tokens.add(t);
tokenType = Token.PINYIN;
} else {
if (tokenType != t.type && sb.length() > 0) {
addToken(sb, tokens, tokenType);
}
tokenType = t.type;
sb.append(character);
}
}
}
if (sb.length() > 0) {
addToken(sb, tokens, tokenType);
}
return tokens;
}

Ⅳ Android中怎麼排序日期和時間

時間排序,方法很多,以下提供幾種常用的方法。

  1. 轉化成long類型進行對比。

  2. 通過Collections.sort()方法進行排序。


【原理】

主要是通過把時間轉化成一些可以對比的數據類型進行排序對比。

【詳細方式或原理】

  1. 轉化成long類型進行對比

    轉化代碼:

StringsDt="08/31/200621:08:00";
SimpleDateFormatsdf=newSimpleDateFormat("MM/dd/yyyyHH:mm:ss");
Datedt2=sdf.parse(sDt);

//繼續轉換得到秒數的long型

longlTime=dt2.getTime()/1000;

把需要對比的時間轉化成long類型進行對比。

2.通過Collections.sort()方法進行排序

Collections.sort()是java提供的官方排序方式。適合多類型排序。

詳細的對比代碼如下:

一般情況下要重寫下Comparator 介面。

importjava.util.Comparator;
{
@Override
publicintcompare(Objectlhs,Objectrhs){
//時間對比
numa=(num)lhs;
numb=(num)rhs;
return(b.getCount()-a.getCount());
}
}

然後在排序的地方進行使用

Comparatorcomp=newSortComparator();
Collections.sort(list,comp);


【最後】

如果數據類型復雜推薦使用方法二,如果類型簡單推薦使用方法一。

Ⅳ 關於androidsqlite的date類型排序問題是怎樣做的

日期類型排序,字元串類排序都是要注意的,如果是在做的過程中出現沒有按照日期類型排序,而是字元串類型排序的。現在有兩種解決方法要不入庫規范點兒2012-3-4入庫為2012-03-04,要不就修改數據類型。

閱讀全文

與android資料庫排序相關的資料

熱點內容
怎樣刪除手機內不用的英文文件夾 瀏覽:81
android獲得屏幕寬度 瀏覽:302
單片機根據波形寫代碼 瀏覽:669
應屆生程序員怎麼投簡歷 瀏覽:721
數學建模演算法與應用ppt 瀏覽:99
遠程怎麼訪問端游伺服器 瀏覽:106
打電話定位置的源碼 瀏覽:642
即時通訊平台源碼 瀏覽:457
安卓自助app怎麼轉到蘋果手機 瀏覽:328
雅馬哈迴音壁不能識別源碼 瀏覽:730
python如何移植到安卓 瀏覽:29
黃柱選股公式源碼 瀏覽:639
教育系統源碼達標 瀏覽:887
音效卡驅動安裝程序在哪個文件夾 瀏覽:60
錢還完了銀行不給解壓 瀏覽:170
linux的系統調用表 瀏覽:752
php怎麼轉換頁面 瀏覽:547
我的世界買了伺服器之後怎麼開服 瀏覽:829
r1234yf汽車空調壓縮機 瀏覽:147
ftp伺服器地址欄 瀏覽:902