本人博客原文 当我们对中文名字排序时,往往采用是的用其拼音来排序的。Android中通过汉字的unicode编码来找到其对应的拼音。汉字unicode编码和其拼音是放在资源文件chinese_unicode_to__pinyin.txt中。 其结构很简单,比如: 示例1:

3007 ling

4E00 yi

4E01 ding

4E02 kao

它正好对应java.util.Properties所需要的格式。但是由于它继承于Hashtable,他使用的是哈希桶来把汉字unicode编码和其拼音对应,有很多哈希桶被创建而没实际使用,造成大量的哈希桶浪费,实际占用内存达2M多。 考虑到chinese_unicode_to__pinyin.txt本身的数据结构特点,我们在采用二维数组的索引来对应汉字unicode编码,第一维数组的下标对应汉字unicode编码的高8表,第二维数组的下标对应汉字unicode编码的低8表,第二维数组数存的字符串来对应汉字拼音的引用。如果在存一个汉字的拼音时,前面有汉字的拼音和他一样时,则使用这个该汉字的拼音的引用就可以了,而不必再创建新的字符串。 对于示例1的汉字和拼音就这样存储:

pinyinTable[0x30][0x0f]="ling"

pinyinTable[0x4E][0x00]="yi"

pinyinTable[0x4E][0x01]="ding"

pinyinTable[0x4E][0x02]="kao"

这样使用MAT查看占用内存就变为1M多,但是实际计算却主要是引用(一个引用占32位,即4个字节)占用的内存比较多,大概是6*(2~12)*4=96k 另外很多汉字的拼音都是相同,所以使用白盒测试显示字符串占用的更少。MAT显示的占用内存仍然有1M,应该是重复计算字符串引起的。

更多相关文章

  1. Android中SparseArray性能优化的使用方法
  2. Android提高十八篇之自定义Menu(TabMenu) [转]
  3. android 小游戏 ---- 数独(三)
  4. Android开发之Java设计模式基础篇
  5. Android适配器Adapter的学习(转载)
  6. android程序启动即开启动态权限
  7. Android数据通信——JSON&Gson(Android(安卓)studio)
  8. Android(安卓)-计算器的实现
  9. Android(安卓)JNI概述

随机推荐

  1. android 4.0 体验!!!!
  2. 深入Android【一】—— 序及开篇
  3. android (java) 网络发送get/post请求参
  4. 6个必看的Android网站
  5. MVC架构设计与三层模型 & MVP思想精髓与
  6. android webview使用html5 上传相册、拍
  7. Android(安卓)TextView文字横向自动滚动(
  8. Android利用Fiddler进行网络数据抓包
  9. Android(安卓)使用Theme实现动态切换主题
  10. Android简明开发教程十九:线程 Bezier曲线