回答編集履歴

2

追記1

2018/06/29 04:42

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -13,28 +13,35 @@
13
13
 
14
14
  でも思いつかなかったのでコードを見ると...
15
15
 
16
- リスト構造は **LinkedList**<areaMaster> で生成していますね。これが原因なのでは?
16
+ ~~リスト構造は LinkedList で生成していますね。これが原因なのでは?と思いました。
17
+ ~~
18
+ ~~で、気になったので「LinkedList ArrayList 違い」及び「LinkedList 順番が狂う」と検索すると、~~
17
19
 
18
- と思いました。
20
+ ~~根拠1: [LinkedList](http://www1.megaegg.ne.jp/~yasu/ProgrammerPage/collection/linkedlist.html)~~
19
21
 
20
- で、気になったので「LinkedList ArrayList 違い」及び「LinkedList 順番狂う」と検索すると、
22
+ ~~ヒットしました。~~
21
23
 
22
- 根拠1: [LinkedList](http://www1.megaegg.ne.jp/~yasu/ProgrammerPage/collection/linkedlist.html)
24
+ ~~ArrayListは「次のオブジェクトへのポインタ」を持っているような状態なのに対し、LinkedListは「前と後~~~~ろのオブジェクトへのポインタ」を持っている状態です。 ( C言語風にいうと。 )~~
23
25
 
24
- がヒットしました。
26
+ ~~で、~~
25
27
 
26
- ArrayListは「次のオブジェクトへのポインタ」を持っているような状態なのに対し、LinkedListは「前と後ろのオブジェクトへのポインタ」を持っている状態です。 ( C言語風にいうと。 )
27
-
28
- で、
29
-
30
- > LinkedListは自分で順序を持ってないためインデックスを指定してダイレクトにオブジェクトを読み出す場合は、インデックスが全体の前半にある場合は先頭から、後半にある場合は後から順番を数えて読み出します。
28
+ ~~> LinkedListは自分で順序を持ってないためインデックスを指定してダイレクトにオブジェクトを読み出す場合は、インデックスが全体の前半にある場合は先頭から、後半にある場合は後から順番を数えて読み出します。
31
29
  ( from 根拠1のページ )
30
+ ~~
31
+ ~~とあります。 ~~
32
32
 
33
- とあります。
34
-
35
- ということは、C++のiteratorに相当するもの ( Javaにも iterator自体はあるようですが使ったことない... ) (根拠2: [[Java] Iteratorのメモ](https://qiita.com/yoshi389111/items/c24f8beefb7b96cad921))
33
+ ~~ということは、C++のiteratorに相当するもの ( Javaにも iterator自体はあるようですが使ったことない... ) (根拠2: [[Java] Iteratorのメモ](https://qiita.com/yoshi389111/items/c24f8beefb7b96cad921))
36
34
  が後ろにある状態でそれを元に戻していないから後ろから読み込まれているため、ソート済みでない感じになっていると思います。
35
+ ~~
36
+ ~~どうしてもLinkedListを使いたいなら、**iteratorに相当するやつで先頭に持ってきて...**とするか、
37
+ **ArrayListの方を使うか...**だと思います。
38
+ ( iteratorを使わなくても先頭にiteratorに相当するやつを前に持ってくることができればそれでいいし。 )~~
37
39
 
40
+ [追記1]
38
- どうしてもLinkedListを使いたいなら、**iterator相当すやつで先頭に持ってきて...**するか、
41
+ どうら、takezoux2さんのご指摘ると
39
- **ArrayListの方使うか...**だと思います。
42
+ > ArrayListはリスト構造ではなく、内部に配列持った実装です。
43
+ また、LinkedListも追加された要素の順番が変化することはありません。
44
+ なので、違うみたいです。取り消し線で取り下げますね。
45
+
46
+ たぶん、私が最初に挙げた内容が違うなら、「そもそもの前提であるデータ設定がなんらかの理由(ライブラリがバグを含んでいる等)によっての操作ミス」か「(〃)によってのソートミス」が考えられますね。
40
- ( iteratorを使わなくても先頭にiteratorに相当するやつを前に持ってくるができればそれでいい )
47
+ それかDBから引張ってくるときのデータとかが壊るか、使方が間違っているか

1

修正

2018/06/29 04:42

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -35,9 +35,6 @@
35
35
  ということは、C++のiteratorに相当するもの ( Javaにも iterator自体はあるようですが使ったことない... ) (根拠2: [[Java] Iteratorのメモ](https://qiita.com/yoshi389111/items/c24f8beefb7b96cad921))
36
36
  が後ろにある状態でそれを元に戻していないから後ろから読み込まれているため、ソート済みでない感じになっていると思います。
37
37
 
38
- 質問者さんはカセットテープはご存知ですか? ( 最近の子どもだと名前すら...っていう場合があるようなので。質問者さんがおいくつなのか不明なので。無くてもいいですが。 ) 一度再生したら巻き戻ししないといけませんよね?
39
- それを「巻き戻しせずに」再生ボタンを押したけどなぜか再生されない...みたいな状態になっていますね。
40
-
41
38
  どうしてもLinkedListを使いたいなら、**iteratorに相当するやつで先頭に持ってきて...**とするか、
42
39
  **ArrayListの方を使うか...**だと思います。
43
40
  ( iteratorを使わなくても先頭にiteratorに相当するやつを前に持ってくることができればそれでいいし。 )