前提・実現したいこと
- Dataクラスのフィールドは、stock, price
- dataListは、Dataクラス型のArrayList
- dataListを、stockの値が大きい順に並べ替える
- stockの数が同じ場合は、priceの値が大きい順に並べ替える
発生している問題
price昇順 → stock昇順 → reverse
とすることで実現できたが、データ数が多くなると処理時間が長い。
そのため、データ数が増えてもなるべく処理時間を短くしたい。
何か良い方法あれば教えていただきたいです。
該当のソースコード
java
1import java.util.ArrayList; 2import java.util.Collections; 3import java.util.Comparator; 4import java.util.Random; 5 6public class Sample { 7 static class Data { 8 int stock, price; 9 10 Data(int stock, int price) { 11 this.stock = stock; 12 this.price = price; 13 } 14 15 int getStock() { 16 return this.stock; 17 } 18 int getPrice() { 19 return this.price; 20 } 21 } 22 23 static final class StockComparator implements Comparator<Data> { 24 @Override 25 public int compare(Data i1, Data i2) { 26 return Integer.compare(i1.stock, i2.stock); 27 } 28 } 29 30 static final class PriceComparator implements Comparator<Data> { 31 @Override 32 public int compare(Data i1, Data i2) { 33 return Integer.compare(i1.price, i2.price); 34 } 35 } 36 37 public static void main(String[] args) { 38 ArrayList<Data> dataList = new ArrayList<>(); 39 for (int i = 0; i < 1000; i++) { 40 for (int j = 1; j < 1000; j++) { 41 Random rand = new Random(); 42 Data data = new Data(i * 100, j * rand.nextInt(100)); 43 dataList.add(data); 44 } 45 } 46 47 Collections.sort(dataList, new PriceComparator()); 48 49 Collections.sort(dataList, new StockComparator()); 50 Collections.reverse(dataList); 51 52 for (int i = 0; i < dataList.size(); i++) { 53 System.out.println(dataList.get(i).getStock() + " " + dataList.get(i).getPrice()); 54 } 55 } 56}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/25 02:11
2021/08/25 02:25
2021/08/25 02:54