Java 顺序2相关数组
我有2个字符串[]数组 第一个是itemArray,它包含产品的名称。 第二个是priceArray,它包含每个项目的价格 itemArray[0]与priceArray[0]相关 itemArray[1]与priceArray[1]相关 我需要根据价格对阵列进行排序 使用以下代码将订购价格数组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)
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()方法以基于价格进行比较。