Java:从ArrayList获取子列表的有效方法

Java:从ArrayList获取子列表的有效方法,java,arraylist,Java,Arraylist,我有一个Person[]数组,如下所示 [A, B, C, D .....] Person -> Friend List [A] -> [B, C, D] [B] -> [A, C, D] [C] -> [A, B, D] 列表中的每个人都是该列表中其他人的朋友。因此,每个人都有一个与他/她相关联的朋友列表,如下所示 [A, B, C, D .....] Person -> Friend List [A] -> [B, C, D] [B] -&

我有一个
Person[]
数组,如下所示

[A, B, C, D .....]
Person -> Friend List

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

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

[C] -> [A, B, D]
列表中的每个人都是该列表中其他人的朋友。因此,每个人都有一个与他/她相关联的朋友列表,如下所示

[A, B, C, D .....]
Person -> Friend List

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

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

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

为了实现这一点,我正在做以下工作(所有人都在
people[]


我正在从文件中读取数据。

编辑1

我根据@NickL在评论中的反馈编辑了答案。 这种替代方法是面向对象的,它比arraylist更直接地改进了对不同对象的访问

它允许直接访问person,并在person中使用哈希表直接访问其任何Fried,而不是逐项遍历数组以查找所需的person

如果在按特定顺序恢复对象时有特殊需要,可以使用树映射而不是哈希映射

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<>();
班级人员{
字符串id;
HashMap friends=新建HashMap();
public void addFriend(字符串id,个人好友){
朋友。放置(id,朋友);
}
...
}
HashMap people=新建HashMap();

要获取好友列表,
只需将self从
Person[]
数组中删除,剩下的
Person[]
数组就是这个人的朋友列表。

你基本上创建了一大堆相同列表的副本,每个副本只有一个区别:这个人不是他/她自己的朋友。为什么不干脆共享同一个列表,只在需要时过滤它呢。请注意,我们不知道你在和那些人和朋友做什么。我已经用一些额外的数据更新了这篇文章。我不知道这是否会有帮助我没有真正理解你的问题,请你详细说明一下,特别是你所说的
p2.name==p.name
@Yahya p2==p.name是什么意思,以确保一个人没有被添加到他自己的朋友列表中。基本上,一个人与列表中的每个人都是朋友,这就是我试图高效地生成的。这与OP在时间复杂性方面所显示的完全相同,可能对内存更糟,更糟的是,它不是OO。尽管如此,一定要复制,当然,我们可以在移除之前复制原始数组,也可以在移除之后复制剩余数组。