質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

3回答

5161閲覧

JavaのListのバブルソート について

YattemiYo

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2018/11/15 15:57

編集2018/11/15 16:13

前提・実現したいこと

JavaではListのバブルソートはできますか?

学校でListをバブルソートする課題が出ました。

参考書やネットにはListのソートの場合はCollectionクラスのSortメソッドを使いましょうといったことが書かれているのがほとんどです。

配列のバブルソートのように書き始めてみましたが、配列のバブルソート でいうif文のarray[j]やarray[j-1]のところがListだとうまくいきません。

また、Listのデータの中身がString型で名前、int型で誕生日など異なる型のフィールドを設けていた時に
どちらかをキーにして並べ替え、というのはバブルソートや、Collection.sort()などで可能なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

java ArrayList sort bubble
で google 検索してみてください。

  • バブルソートをJava8 でコーディング

https://hobik-site.blogspot.com/2018/02/java8.html

  • Using Bubble sort with Comparable ArrayLists

https://stackoverflow.com/questions/47784394

  • [java] カスタムソート順を使用してオブジェクトのArrayListをソートする

https://code.i-harness.com/ja/q/1bae4f

投稿2018/11/15 20:56

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YattemiYo

2018/11/16 15:21 編集

ご教授ありがとうございます。
guest

0

pythonだけど考え方は一緒

python

1a=[10,3,1,4,2] 2for i in range(len(a)-1): 3 for j in range(len(a)-1,i,-1): 4 if(a[j]<a[j-1]): 5 tmp=a[j] 6 a[j]=a[j-1] 7 a[j-1]=tmp 8print(a)

投稿2018/11/15 16:47

flan

総合スコア146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YattemiYo

2018/11/16 15:22

ご教授ありがとうございます。
guest

0

ベストアンサー

例えば、配列の

java

1int a = array[0];

は、Listでは

java

1int a = list.get(0);

と書けばいいですし、配列の

java

1array[0] = a;

は、Listでは

java

1list.set(0, a);

と書けばいいです。

また、数値以外の一般のオブジェクトの比較の方法として、
0. そのクラスにComparableを実装する
0. そのクラスのオブジェクトを引数にとれるComparatorオブジェクトを作る

事で実現できます。

投稿2018/11/15 16:23

編集2018/11/15 16:28
swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YattemiYo

2018/11/16 15:21

ご教授ありがとうございます。 頂いたアドバイスをもとにコーディングしてみました。 /** * Listをソートして出力するプログラム */ public class printHumanData{ public void printList(ArrayList<Human> list) { //バブルソート  for (int i = 0; i < list.size() - 1; i++) { for (int j = list.size() - 1; j > i; i--) { Human human1 = list.get(j); Human human2 = list.get(j - 1); //順次比較 年齢をキーにする if (human1.getAge() < human2.getAge()) { Human humanT = human1; human1 = human2; human2 = humanT; } } //受け取ったListからデータを取得する for (Human human : list) { //ゲッターを呼び出して出力する System.out.println(human.getName() + "," + human.getAge()); } } } } データを入れ見たところ、出力結果が無限に出てきてしまいました・・・。 入力例: 名前  年齢 Aさん 12 Cさん 14 Bさん 10 実行結果: Bさん,10 Aさん,12 Cさん,14 Bさん,10 Aさん,12 Cさん,14 Bさん,10 Aさん,12 Cさん,14 ・ ・ ・ 拡張for文のところが誤っているのでしょうか・・・。 度々申し訳ございません。 教えていただけると嬉しいです。
swordone

2018/11/16 15:31

ぱっと見たところ、間違いは少なくとも2箇所。 1.内側のforでの更新分がj--ではなくi--になっているため、iがオーバーフローしない限り終わらない。 2.リスト出力が外側forの内部にあるため、繰り返し出力されている。
YattemiYo

2018/11/16 18:19

ご指摘ありがとうございます。 呆れるような、初歩的すぎる間違いも ご丁寧に確認し、教えてくださりありがとうございました。 お手数をおかけし申し訳ございませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問