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

时间:2017-05-21 14:14:42

标签: java 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

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

2 个答案:

答案 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" />