Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 顺序2相关数组_Java_Android_Algorithm - Fatal编程技术网

Java 顺序2相关数组

Java 顺序2相关数组,java,android,algorithm,Java,Android,Algorithm,我有2个字符串[]数组 第一个是itemArray,它包含产品的名称。 第二个是priceArray,它包含每个项目的价格 itemArray[0]与priceArray[0]相关 itemArray[1]与priceArray[1]相关 我需要根据价格对阵列进行排序 使用以下代码将订购价格数组 List<Float> pricefloatArrayTo Order = new ArrayList<Float>(); for (String s : priceArray)

我有2个字符串[]数组

第一个是itemArray,它包含产品的名称。 第二个是priceArray,它包含每个项目的价格

itemArray[0]与priceArray[0]相关 itemArray[1]与priceArray[1]相关

我需要根据价格对阵列进行排序

使用以下代码将订购价格数组

List<Float> pricefloatArrayTo Order = new ArrayList<Float>();
for (String s : priceArray) {                        
                        pricefloatArrayTo (Float.valueOf(s));  

                    }

                    Collections.sort(pricefloatArrayTo );
List price floatArrayTo Order=new ArrayList();
对于(字符串s:priceArray){
pricefloatArrayTo(Float.valueOf);
}
Collections.sort(pricefloatararyto);
唯一的问题是,itemArray现在需要按照priceArray排序,以便数组再次匹配


有人能推荐一种方法,我可以使用它根据priceArray对两个数组进行排序。提前感谢

不如创建一个包含价格和商品的新类,而不是将元素分隔在两个数组中。您可以让这个类实现一个接口,您可以使用该接口按价格对包含这个新类的数组进行排序

例如:

public class Item implements Comparable<Item> {
  public String name;
  public BigDecimal price;

  @Override
  public int compareTo( Item o ) {
    return price.compareTo( o.price );
  }
}
公共类项实现可比较{
公共字符串名称;
公共价格;
@凌驾
公共整数比较(o项){
返回价格。比较(o.价格);
}
}
(为了清晰起见,我删除了正常的get/set封装和null检查)


然后,您可以拥有一个此类数组(或列表),然后进行排序。

我建议您停止使用两个数组,而是创建一个类型为
Item
(或
Product
,或其他任何类型的数组),其中
Item
具有价格(理想情况下是
bigdecimic
,而不是
float
)和名称(作为字符串)。然后,您可以对传入比较器的单个数组进行排序,比较器将按价格对项目进行比较

这可能会使您的代码在不同的地方变得更简单,而不仅仅是在这里。每当您有多个集合要像这样保持同步,保持同一基本数据单元的不同方面时,就值得尝试改进封装。

如果您确实需要使用两个单独的数组,我建议构建一个排序后的map price->array index,然后使用排序后的索引对数组进行排序

大概是这样的:

 //NOTE: this assumes both arrays have the same number of entries
 float[] prices = ...;//assuming your price array
 String[] itemNames = ... ;//assuming your item name array

 TreeMap<BigDecimal, Integer> priceIndexMap = ...;//already sorted upon insertion

 for( int i = 0; i < prices.length; i++ ) {
   priceIndexMap.put(new BigDecimal(prices[i]), new Integer(i));
 }

 float[] pricesSorted = new float[prices.length];    
 String[] itemNamesSorted = new String[itemNames .length];    

 int newIndex = 0; 
 for( Integer index : priceIndexMap.values() ) {
   pricesSorted[newIndex] = prices[index];
   itemNamesSorted [newIndex] = itemNames [index];
   newIndex++;
 }
//注意:这假设两个数组的条目数相同
浮动[]价格=//假设您的价格数组
字符串[]itemNames=//假设您的项目名称数组
树映射priceIndexMap=//插入时已排序
对于(int i=0;i

我想再次指出,正如其他人已经说过的那样,不推荐这种方法。只有在必要的时候才使用它。

使用对象
产品
,并赋予它名为
名称
价格
的属性。然后,实现compareTo()方法以基于价格进行比较。