【问题标题】:ArrayList<String> vs String[], How and when to use?ArrayList<String> vs String[],如何以及何时使用?
【发布时间】:2020-10-18 02:46:30
【问题描述】:

我正在学习如何在 Android 应用程序上制作 ListView,我想了解这两个,一些示例使用 String[],一些使用 ArrayList....但我看不到人们如何在 String[ 中添加更多项目].

【问题讨论】:

    标签: java android arrays listview


    【解决方案1】:
    • 首先,String[]属于常规数组,这意味着该数组所包含的数据大小是固定的,不能改变。否则,ArrayList 不是。它可以随着数量元素的增长而增长。此外,ArrayList 具有一组访问元素和修改元素的方法。但是ArrayList只能存储Object,存储速度比较慢。

    • 对于为什么在 ListView 或 RecyclerView 中的答案,大多数情况下,我们使用 ArrayList 而不是 Array,因为 ArrayList 具有扩展能力。例如,在 NoteApp 中,如果使用 Array,则必须为便笺设置固定的分配编号,但如果添加新便笺,则必须以编程方式更改。它无法调整大小以包含新注释。因此,ArrayList 适合这种情况。

    【讨论】:

      【解决方案2】:

      String[] 是一种原始数据类型,一个具有固定大小 的简单数组,必须在 COMPILE TIME 知道并且不能在 COMPILE TIME 更改强>运行时间。

      考虑:

      String[] foo = new String[2];
      

      在这里,您声明了一个简单的字符串数组,它可以容纳 2 个字符串。 让我们添加一些东西:

      foo[0] = "String One";
      foo[1] = "String Two";
      

      你也可以这样转发声明:

      String[] foo = {"String One", "String Two"};
      

      您可以更改 foo 的内容,但您不能添加另一个字符串或删除它,因为它具有固定大小。

      另一方面,ArrayList 是一个动态列表,您可以在其中随时在程序中添加或删除 T 类型的项目。 大小不需要在 COMPILE TIME 定义,Arraylist 的内容可以在 RUNTIME 添加或删除。它是两者中最灵活的数据结构。

      考虑:

      ArrayList<String> foo = new ArrayList<>();
      

      声明动态数组。它具有可变大小,并且无需在初始化时定义元素的数量。您可以在 RUNTIME 随时根据需要添加或删除元素。

      请注意:

      foo.add("String One");
      foo.add("String Two);
      

      可以随时添加到您的程序中。删除元素也是如此。由于 ArrayList 是一个(通用)类,它还有一堆普通数组没有的有用方法! 另请阅读 Java 泛型以了解完整情况。

      所以这取决于你想用 ListView 做什么。如果您只想显示一组固定的字符串然后选择 String[],或者您需要通过添加或删除数据来动态更改视图的内容,那么 ArrayList 可能是适合该工作的。

      【讨论】:

      • 感谢您的清晰解释,如果我说,给 String [] 的大小为 999,我的数据不会那么多,它会比 Array list 快吗?有人说arraylist存储速度较慢。
      • 一个简单的数组通常更快,因为没有调整大小。但这实际上取决于您的用例:您想对列表视图中的数据做什么。它是一个固定的集合 (String[]) 还是你需要动态改变它?是否需要通知程序进行更改(使用 ObservableList 代替,因为您使用 ListView)。了解用例后,您就可以选择正确的用例了。
      • 我只想在onCreate时显示列表,在添加新项目时更新列表,并在按住/长按时删除手指位置的项目。
      • 那么 Observable List 就是你要走的路。 docs.oracle.com/javafx/2/collections/jfxpub-collections.htm
      • 我很高兴能帮上忙。请同时查看提到 ObservableList 的 ListView 文档:docs.oracle.com/javase/8/javafx/api/javafx/scene/control/…
      猜你喜欢
      • 2013-07-02
      • 2021-01-11
      • 2017-06-01
      • 2012-06-18
      • 2011-12-02
      • 2016-01-13
      • 2016-08-23
      • 2012-08-31
      • 1970-01-01
      相关资源
      最近更新 更多