在考虑大量联系人数据显示优化时想了下是否可以使用TreeBasedTable
需求:
1.按照首字母排序
2.右侧有首字母快速导航栏,可快速切到该字母下的联系人起始位置。
package com.hoowe.sdk.basemodule.collect; import com.google.common.collect.Table; import com.google.common.collect.TreeBasedTable; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; public class TableTest { private static Table<String, Integer, Object> treeBasedTable = TreeBasedTable.create(); private TreeMap<String, Object> treeMap; public static class Contact { private String phoneNum; private char firstLetterAscii; public Contact(String phoneNum, char firstLetterAscii) { this.phoneNum = phoneNum; this.firstLetterAscii = firstLetterAscii; } } /** * 返回手机号码 */ private static String[] telFirst="134,135,136,137,138,139,150,151,152,157,158,159,130,131,132,155,156,133,153".split(","); private static String getTel() { int index=getNum(0,telFirst.length-1); String first=telFirst[index]; String second=String.valueOf(getNum(1,888)+10000).substring(1); String third=String.valueOf(getNum(1,9100)+10000).substring(1); return first+second+third; } public static int getNum(int start,int end) { return (int)(Math.random()*(end-start+1)+start); } public static void main(String[] args) { treeBasedTable = TreeBasedTable.create(); for (int i = 0; i <50; i ++){ int firstLetter = i%27 + 65; String phoneNum = getTel(); char firstLetterChar = (char)firstLetter; Contact contact = new Contact(phoneNum,firstLetterChar); System.out.println(" ASCII:"+(char)firstLetter); treeBasedTable.put(phoneNum,firstLetter,contact); } Contact contact = new Contact("15555555555",'A'); treeBasedTable.put("15555555555",(int)'A',contact); Iterator entries = treeBasedTable.rowMap().entrySet().iterator(); /** * 遍历获取每行数据的Map<>'firstLetter':Contact</> */ while (entries.hasNext()){ Map.Entry<String,Map<Integer,Object>> entry = (Map.Entry)entries.next(); System.out.println(entry.getKey()); System.out.println(entry.getValue()); } System.out.println(treeBasedTable.row("15555555555").size()); //每行的数据MAP<PHONENUM:MAP<LETTER:CONTACT>> System.out.println(treeBasedTable.rowMap()); System.out.println(); System.out.println(); //每列的数据map<LETTER:MAP<PHONENUM:CONTACT>> System.out.println(treeBasedTable.columnMap()); System.out.println(); System.out.println("############"); //获取首字母为A的所有联系人数据 System.out.println(treeBasedTable.column((int)'A').values()); System.out.println("############"); System.out.println(); System.out.println(treeBasedTable.cellSet()); System.out.println(treeBasedTable.columnKeySet()); System.out.println(treeBasedTable.columnMap()); System.out.println(treeBasedTable.size()); } }