我有一个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
我正在从文件中读取数据。
答案 0 :(得分:0)
获取朋友名单,
只需从Person[]
数组中删除self,Person[]
数组的剩余部分就是该人的朋友列表。
答案 1 :(得分:-1)
编辑1
我根据评论中@NickL的反馈编辑了答案。 这个替代方案是OO,它以比arraylist更直接的方式改进了对不同对象的访问。
它允许访问直接访问此人和使用哈希表直接访问其任何炒作,而不是逐项遍历数组以找到所需的人。
如果特别需要以特定顺序恢复对象,可以使用TreeMap而不是HashMap。
HashMap项目也可以使用其密钥逐个循环。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.melnykov.fab.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_margin="16dp"
android:src="@drawable/ic_action_content_new"
fab:fab_colorNormal="@color/primary"
fab:fab_colorPressed="@color/primary_pressed"
fab:fab_colorRipple="@color/ripple" />