Java 按2个字符映射字符数组2
我有一个类似于xxyyxyxxxzxzzxxxyxx的字符数组,我想将它映射到LinkedHashMap,如下所示:Java 按2个字符映射字符数组2,java,hashmap,linkedhashmap,Java,Hashmap,Linkedhashmap,我有一个类似于xxyyxyxxxzxzzxxxyxx的字符数组,我想将它映射到LinkedHashMap,如下所示: public LinkedHashMap<String, Integer> convert(char[] array) { LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>(); int[] freq = new int[array
public LinkedHashMap<String, Integer> convert(char[] array) {
LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();
int[] freq = new int[array.length];
int i, j;
for (i = 0; i < array.length; i+=2) {
freq[i] = 1;
for (j = i + 2; j < array.length; j+=2) {
if (array[i] + array[i+1] == array[j] + array[j+1]) {
freq[i]++;
array[j] = '0'; //flag to check if it is already printed
array[j+1] = '0'; //flag to check if it is already printed
}
}
}
for (i = 0; i < freq.length; i+=2) {
if (array[i] + array[i+1] != ' ' && array[i] != '0') {
String dublex = ""+ array[i] + array[i+1];
hmap.put(dublex, freq[i]);
}
}
return hmap;
}
公共LinkedHashMap转换(字符[]数组){
LinkedHashMap=新建LinkedHashMap();
int[]freq=新的int[array.length];
int i,j;
对于(i=0;iarray[I]!='0'&数组[i+1]!='0'
那么,如何解决这个问题呢?这只是对sc0der的重新表述,是应十六进制的要求发布的
public static LinkedHashMap<String, Integer> convert(char[] array) {
LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();
for (int i = 0; i < array.length - 1; i += 2) {
map.put(array[i] + "" + array[i + 1], map.getOrDefault(array[i] + "" + array[i + 1], 0) + 1);
}
return map;
}
public static void main(String[] args) {
System.out.println(convert("XXYYXYXYXZXZXZXYXX".toCharArray()));
}
static Map<String, Integer> pairFreq(char[] array)
{
LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
for(int i=0; i<array.length; i+=2)
{
String key = new String(array, i, 2);
map.put(key, 1 + map.getOrDefault(key, 0));
}
return map;
}
难以置信,只用了一半的代码行!非常感谢:)是的,回答得很好。您可以使用
newstring(array,i,2)
而不是array[i]+“”+array[i+1]
。另外,循环条件的可以是i
,但结果是一样的。@SirRaffleBuffle您能把它作为答案发布吗?通过这样做,这个问题和答案帮助了更多的人;)提前谢谢。@SirRaffleBuffle我也试过你的方法,是的,它更干净,不会改变结果。如果你还有别的建议,我很乐意听你的。谢谢
static Map<String, Integer> pairFreq(char[] array)
{
LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
for(int i=0; i<array.length; i+=2)
{
String key = new String(array, i, 2);
map.put(key, 1 + map.getOrDefault(key, 0));
}
return map;
}
String str = "XXYYXYXYXZXZXZXYXX";
Map<String, Integer> map = pairFreq(str.toCharArray());
for(String pair : map.keySet())
System.out.println(pair + " : " + map.get(pair));
XX : 2
YY : 1
XY : 3
XZ : 3