簡體   English   中英

Java:從ArrayList獲取子列表的有效方法

[英]Java: Efficient way of getting sublists from an ArrayList

我有一個Person[]數組,如下所示

[A, B, C, D .....]

列表中的每個人都是該列表中的另一個朋友。 因此,每個人都有一個與他/她相關聯的朋友列表,如下所示

Person -> Friend List

[A] -> [B, C, D]

[B] -> [A, C, D]

[C] -> [A, B, D]

等等。

為此,我正在執行以下操作(所有人員均在people[]

   ArrayList<Person> persons = new ArrayList<>(Arrays.asList(people));
   for (int i = 0; i < people.length; i++)
   {
       Person p = people[i];
       for (Person p2: persons)
       {
           if (p2.name == p.name) continue;
           p.add_to_friend_list(p2);
       }
   }

它適用於小型數據集,但顯然適用於大型集,這需要大量時間。

我想知道是否有一種方法可以加快速度,或者我缺少/做錯了什么。

更新:每年的朋友列表都不同。 例如(file.txt)

[Year1]4
A
B
D
E
[YEAR2]4
G
H
A
D
[YEAR3]5
K
L
M
C
D

我正在從文件中讀取數據。

為了得到人的好友名單,只是刪除從自我Person[]數組中,仍然是Person[]數組的人的好友列表。

編輯1

我已經根據評論中@NickL的反饋編輯了答案。 這種替代方法是OO,它比arraylist更直接地改善了對不同對象的訪問。

它使用戶可以直接訪問該人員,並且可以使用哈希表直接訪問該人員的任何聯系人,而不是逐項檢查數組以查找所需人員。

如果在按特定順序恢復對象方面有特殊需要,可以使用TreeMap代替HashMap。

HashMap項也可以使用其鍵一個一個地循環。

class Person{
    String id;
    HashMap<String, Person> friends = new HashMap<>();

    public void addFriend(String id, Person friend){
       friends.put(id, friend);
    }
    ...
}

HashMap<String, Person> people = new HashMap<>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM