Android中汉字转拼音的内存优化处理
16lz
2021-01-24
本人博客原文 当我们对中文名字排序时,往往采用是的用其拼音来排序的。Android中通过汉字的unicode编码来找到其对应的拼音。汉字unicode编码和其拼音是放在资源文件chinese_unicode_to__pinyin.txt中。 其结构很简单,比如: 示例1:
它正好对应java.util.Properties所需要的格式。但是由于它继承于Hashtable,他使用的是哈希桶来把汉字unicode编码和其拼音对应,有很多哈希桶被创建而没实际使用,造成大量的哈希桶浪费,实际占用内存达2M多。 考虑到chinese_unicode_to__pinyin.txt本身的数据结构特点,我们在采用二维数组的索引来对应汉字unicode编码,第一维数组的下标对应汉字unicode编码的高8表,第二维数组的下标对应汉字unicode编码的低8表,第二维数组数存的字符串来对应汉字拼音的引用。如果在存一个汉字的拼音时,前面有汉字的拼音和他一样时,则使用这个该汉字的拼音的引用就可以了,而不必再创建新的字符串。 对于示例1的汉字和拼音就这样存储:3007 ling
4E00 yi
4E01 ding
4E02 kao
这样使用MAT查看占用内存就变为1M多,但是实际计算却主要是引用(一个引用占32位,即4个字节)占用的内存比较多,大概是6*(2~12)*4=96k 另外很多汉字的拼音都是相同,所以使用白盒测试显示字符串占用的更少。MAT显示的占用内存仍然有1M,应该是重复计算字符串引起的。pinyinTable[0x30][0x0f]="ling"
pinyinTable[0x4E][0x00]="yi"
pinyinTable[0x4E][0x01]="ding"
pinyinTable[0x4E][0x02]="kao"
更多相关文章
- Android中SparseArray性能优化的使用方法
- Android提高十八篇之自定义Menu(TabMenu) [转]
- android 小游戏 ---- 数独(三)
- Android开发之Java设计模式基础篇
- Android适配器Adapter的学习(转载)
- android程序启动即开启动态权限
- Android数据通信——JSON&Gson(Android(安卓)studio)
- Android(安卓)-计算器的实现
- Android(安卓)JNI概述