【问题标题】:how to switch elements in an ArrayList如何在 ArrayList 中切换元素
【发布时间】:2014-03-28 17:35:49
【问题描述】:

以下 ArrayList 填充了一个 ArrayAdapter。

List<String> hold_people = new ArrayList<String>();

hold_people.add("Frank");
hold_people.add("Bob");
hold_people.add("Tom");
hold_people.add("Alice");
hold_people.add("Glen");

弗兰克排在第一位。但用户想先见爱丽丝。如何将 Alice 移动到第一个位置?

我不能按字母顺序排序,因为我必须保持一定的顺序...根据用户请求。

【问题讨论】:

  • 您要对列表进行排序吗?
  • 我不想排序。
  • 使用set(index, Obj)

标签: java android arraylist


【解决方案1】:

您可以使用Collections.swap

Collections.swap(hold_people, 0, hold_people.indexOf("Alice"));

这会将列表中的第一个元素与"Alice" 交换。

请注意,如果您的列表中没有字符串 "Alice"hold_people.indexOf("Alice") 可以返回 -1,因此您可以检查列表中是否包含它。

int index = hold_people.indexOf("Alice");
if(index != -1)
    Collections.swap(hold_people, 0, index);

【讨论】:

  • @user3134565 为我工作:ideone.com/y5vVi1。确保在适配器中进行更改时正确更新列表视图。
【解决方案2】:

使用Collections.swap(List&lt;?&gt; list, int i, int j)

交换指定列表中指定位置的元素。 (如果指定的位置相等,则调用此方法会离开 列表不变。)

使用Collections.rotate(List&lt;?&gt; list, int distance)

将指定列表中的元素旋转指定距离。 调用此方法后,索引 i 处的元素将是元素 以前在索引 (i - 距离) mod list.size() 处,对于所有值 i 介于 0 和 list.size()-1(含)之间。 (这个方法没有效果 关于列表的大小。)

【讨论】:

    【解决方案3】:

    如果由于某种原因你不想使用 Collections,你可以这样做

    String temp = hold_people.get(0);
    int i = hold_people.indexOf("Alice");
    hold_people.set(0,"Alice");
    hold_people.set(i, temp);
    

    这会根据你想换哪一个而改变,但基本的想法就在那里。

    【讨论】:

      猜你喜欢
      • 2017-04-14
      • 2020-08-03
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 2020-11-16
      • 2014-12-05
      • 2019-12-21
      相关资源
      最近更新 更多