日期:2014-05-20  浏览次数:20725 次

一个看起来似乎很简单的算法,突然卡住了,大家起来看下怎么解决
现有两个简单数组A与B:
一、 int[] A = {8,2,3,3,2,7};
二、 String[] B = new String[]{"a","b","c","d","e","f"};

现我要求,这两个数组的下标要实现一一对应,即8-a,2-b,3-c,3-d,2-e,7-f

此时,我想实现,当我对A数组进行排序时(比如升序排为:{2,2,3,3,7,8})
如何简单的同步实现数组B的跟着A变换化呢?
比如,当A升级排序时,此时,B要变为:{b,e,c,d,f,a}(要据文红色对应的原则)

楼主一开始想到用TreeMap来做,当由于A中有相对的数值,不符合KEY唯一性的要求,实现不了,所以就一时似乎卡住了,各位高人怎么看?

------解决方案--------------------
引用:
 你可以用String做Key啊
然后修改CompareTo方法
------解决方案--------------------
引用:
Quote: 引用:

自己定义一个Pair 

Pair 是什么?怎么定义?

类似这样
public class Pair implements Comparable<Pair>{
//
int number;
String name;

//
public int compareTo(Pair p){
return this.number-p.number;
}
}

------解决方案--------------------
在排序的过程中,创建另一个下标数组就可以了,
int[] A = {8,2,3,3,2,7};
int[] SORT = {0,1,2,3,4,5};

当A变成{2,2,3,3,7,8}
SORT变成{1,4,2,3,5,0}


------解决方案--------------------
其实treemap是完全可以用的,你只需要将key值设成double类型遇到相同的键值将其小数位递增

------解决方案--------------------
我就会用笨办法:

import java.util.*;

public class ArraysAB {
public static void main(String[] args) {
int[] A = { 8, 2, 3, 3, 2, 7 };
String[] B = { "a", "b", "c", "d", "e", "f" };

Set<AB> set = new TreeSet<AB>();//把二个数组内容连同下标封装成对象.放TreeSet里。
for(int i = 0; i< A.length; i++)
{
AB ab = new AB(A[i], i, B[i]);
set.add(ab);
}
//将排序后的容器内容,存放数组输出。
//
int[] A1 = new int[A.length];//排序后的A.
String[] B1 = new String[A.length];//排序后的B
//int[] indexA = new int[A.length];//原数组A的下标顺序。
int k =0;
for(AB ab0:set)
{
A1[k] = ab0.getA();
B1[k] = ab0.getB();
//indexA[k] = ab0.getIndex();
k++;
}

System.out.println(" -------- 排序前数组: -------------");
System.out.println(Arrays.toString(A));
System.out.println(Arrays.toString(B));
System.out.println(" ********* 排序后数组:*************");
System.out.println(Arrays.toString(A1));
System.out.println(Arrays.toString(B1));
//System.out.println(Arrays.toString(indexA));
}
}
//类AB 用于封装数组的内容。
//
class AB implements Comparable<AB> {