2011-03-04 27 views
0

我需要基于另一个数组中保存的位置对数组进行排序。Java:将不同类型的数组排序到另一个

我有什么工作,但它有点慢,有没有更快/更好的方式来实现这一点?

2件:

第一部分

int i = mArrayName.size(); 
int temp = 0; 
for(int j=0;j<i;j++){ 
      temp = mArrayPosition.get(j); 
      mArrayName.set(temp, mArrayNameOriginal.get(j)); 
     } 

在这一部分,mArrayPosition是我想mArrayName是在位置

例。
输入:
mArrayName =(一个,两个,三个)
mArrayPosition =(2,0,1)

输出:
mArrayName =(3,一个2)

第2部分

int k=0; 
int j=0; 
do{ 
    if(mArrayName.get(k)!=mArrayNameOriginal.get(j)){ 
     j++; 
    }else{ 

     mArrayIdNewOrder.set(k, mArrayId.get(j)); 
      k++; 
      j=0; 
     } 
    }while(k < mArrayName.size()); 
} 

在这种PA rt,mArrayName是重新排序的名称数组,mArrayNameOriginal是原始名称数组。

Ex。
mArrayName =(三,一,二)
mArrayNameOriginal =(一,二,三)

现在,我想这两个数组比较,找出哪些条目都是平等的,涉及的是一个新的数组中有它们的rowId编号。

Ex。
输入:
mArrayId =(001,002,003)

输出:
mArrayIdNewOrder =(003001002)

于是我将有mArrayIdNewOrder ID与在mArrayName正确的名称匹配起来。

就像我说的这些方法的工作,但有没有更快/更好的方法来做到这一点?我试着看着Arrays.sort和比较器,但他们似乎只是按字母或数字排序。我看到像我可以在比较器中创建自己的规则,但它可能最终会与我已有的相似。

对不起,令人困惑的问题。如果需要,我会尽力澄清任何含糊之处。

+0

我们在说ArrayLists? – ThomasRS 2011-03-04 00:49:52

+0

呃第一个例子怎么可能是正确的,你不想要(一个@ 2,两个@ 0,三个@ 1)输出(两个,三个,一个)? – ThomasRS 2011-03-04 01:01:33

+0

是这些是arraylists – Cameron 2011-03-04 01:54:57

回答

1

我发现的最佳表现是Android's Designing For Performance doc。你违反了几种“Android方式”的做法,可以帮助你。

您在每个循环内使用多个内部获取器,看起来像一个简单的值。通过直接访问字段进行重做。

要获得额外功劳,请发表您的成绩比较结果!我很想看到他们!

+0

啊,谢谢你,我已经为我的其他应用程序做了这个,但忘记了这个!这也会有所帮助。 – Cameron 2011-03-04 01:58:21

1

你可以使用某种形式的元组,某些类同时拥有id和name。你只需要有一个java.util.Comparator来相应地进行比较,这两个元素就会一起移动,你的代码将变得更清晰。

这个数据结构可能对你的程序的其余部分很方便......如果不是,只要把它取下来,你就完成了。

+0

听起来不错!现在你是怎么做到的......嘿,你能提供一个代码示例来说明如何让这些阵列一起移动到比我已经更快的期望配置上吗?我的大脑只考虑循环和if语句。 – Cameron 2011-03-04 02:08:21

0

如果您的订单索引是紧凑的,即从索引0到大小-1,那么只需使用一个数组并在之后创建更新列表?关于像

MyArray[] array = new MyArray[size]; 
for(int j=0;j< size;j++) { 
    array[ mArrayPosition.get(j) ] = mArrayName.get(j); 
} 

// create ArrayList from array 
+0

这就是我已经拥有的。写下你的样子,它看起来像这样 mArrayName.set(mArrayPosition.get(j),mArrayNameOriginal.get(j)); 你的方式只是摆脱临时变量。 – Cameron 2011-03-04 02:02:34

+0

如果你不打算遵循Lungberg的方法(面向对象?),我建议你使用Maps。 – ThomasRS 2011-03-04 11:45:50

相关问题