[英]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.