Guava TreeBasedTable

在考虑大量联系人数据显示优化时想了下是否可以使用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());
    }
}

猜你喜欢

转载自www.cnblogs.com/kelisi-king/p/9157294.html