希望在字符串中保持一个持续的记录...(As,Bs,Cs等的数量)我一直无法更新与键相关的值。每次我想更新值时都必须创建一个新对象,因为Integer是不可变的。其他类型(如Atomic Integer)会抛出异常或要求使用-Xlint重新编译。有没有什么比HashMap更好的重复更新键/值对?不断创建新对象似乎是不好的做法,我不想用-Xlint重新编译。我在python中没有这个问题,因为python允许使用与Java的Integer不同的字典的整数。
HashMap map = new HashMap<Character,Integer>();
^我不想每次想要增加我的值时创建一个新的Integer对象,或者至少我想要“安全地”和我的常规编译器这样做。不是-Xlint。
发布于 2018-10-18 09:08:28
可以拥有这个简单的数据结构(一个int数组)(因为你只想要从'A'到'Z'的字符)
// each index corresponds to a character
// 'A' corresponds to index 0 (ASCII value 65)
// 'B' corresponds to index 1 (ASCII value 66) and so on till 'Z'
int[] countArray = new int[26];
假设得到字母“F”(ASCII值70),可以更新“F”的计数,如下所示:
// (int)('F'-'A') will give you 5
countArray[(int)('F'-'A')] += 1;
发布于 2018-10-18 09:51:57
如果你严格处理String中的字符,你可以使用长度为256的int数组,即int[] map = new int[256];
如果你处理unicode字符你必须使用长度65536,因为java的char类型是无符号的16位整数。要获得/修改/更新,可以执行类似map['K'] = 6;
或更新的操作int countK = map['K'];
https://stackoverflow.com/questions/-100002932
复制相似问题