【问题标题】:How to use an array list in Java?如何在 Java 中使用数组列表?
【发布时间】:2011-02-11 10:27:16
【问题描述】:

我需要知道我是否将数据存储在 ArrayList 中,并且我需要获取存储在其中的值。

例如:如果我有一个这样的数组列表

      ArrayList A = new ArrayList();
      A = {"Soad", "mahran"};

我想获取每个String元素,我该怎么做?

我已经尝试通过以下代码来做到这一点:

package arraylist;

import java.util.ArrayList;

public class Main {

        public static void main(String[] args) {
        ArrayList S = new ArrayList();

        String A = "soad ";
        S.add(A);
        S.add("A");
        String F = S.toString();
        System.out.println(F);
        String [] W = F.split(",");
        for(int i=0 ; i<W.length ; i++) {
           System.out.println(W[i]);
        }
    }
}

【问题讨论】:

  • 关于您的代码的几点说明:不要使用单字母变量名。相反,使用清楚地表明变量用途的名称 - 这将使您的代码不那么神秘。此外,Java 中的约定是使用以小写字母开头的变量名。

标签: java arraylist


【解决方案1】:

三行解决方案,但效果很好:

int[] source_array = {0,1,2,3,4,5,6,7,8,9,10,11};
ArrayList<Integer> target_list = new ArrayList<Integer>();
for(int i = 0; i < source_array.length; i++){
    target_list.add(random_array[i]);
}

【讨论】:

    【解决方案2】:

    object get(int index) 用于返回存储在 调用集合中的指定索引。

    代码片段:

    import java.util.*;
    
    
    class main
    {
        public static void main(String [] args)
        {
            ArrayList<String> arr = new ArrayList<String>();
            arr.add("Hello!");
            arr.add("Ishe");
            arr.add("Watson?");
    
            System.out.printf("%s\n",arr.get(2)); 
    
            for (String s : arr) 
            {
                System.out.printf("%s\n",s);
            } 
        }
    }
    

    【讨论】:

      【解决方案3】:

      首先,您需要定义需要在列表中保留的数据类型。正如您提到的数据将是字符串,列表应该由字符串类型组成。

      然后,如果您想获取列表的所有元素,您只需使用简单的 for 循环或 for each 循环遍历列表即可。

      List <String> list = new ArrayList<>();
      list.add("A");
      list.add("B");
      
      for(String s : list){
          System.out.println(s);
      }
      

      此外,如果您想使用原始 ArrayList 而不是通用的,您将不得不向下转换该值。使用原始 ArrayList 时,所有元素都以 Object 的形式存储。

      List list = new ArrayList();
      list.add("A");
      list.add("B");
      
      for(Object obj : list){
          String s = (String) obj; //downcasting Object to String
          System.out.println(s);
      }
      

      【讨论】:

        【解决方案4】:

        Java 8 在 Iterable 接口中引入了 forEach() 的默认实现,您可以通过声明的方式轻松实现。

          List<String> values = Arrays.asList("Yasir","Shabbir","Choudhary");
        
          values.forEach( value -> System.out.println(value));
        

        这是Iterable接口的代码

          default void forEach(Consumer<? super T> action) {
            Objects.requireNonNull(action);
            for (T t : this) {
                action.accept(t);
            }
        }
        

        Reference

        【讨论】:

          【解决方案5】:

          List 是一个有序的Collection 元素。您可以使用 add 方法添加它们,并使用 get(int index) 方法检索它们。您还可以遍历 List、删除元素等。以下是使用 List 的一些基本示例:

          List<String> names = new ArrayList<String>(3); // 3 because we expect the list 
              // to have 3 entries.  If we didn't know how many entries we expected, we
              // could leave this empty or use a LinkedList instead
          names.add("Alice");
          names.add("Bob");
          names.add("Charlie");
          System.out.println(names.get(2)); // prints "Charlie"
          System.out.println(names); // prints the whole list
          for (String name: names) {
              System.out.println(name);  // prints the names in turn.
          }
          

          【讨论】:

          • 在构造函数中定义列表的大小是提高效率的好习惯,但列表会自动调整大小,因此它并不是真正需要的。如果您将其添加到评论中会很好,这样初学者就不会感到困惑。
          • '+ "\n"' 是干什么用的? println 将处理新行,无论如何您不能将字符串添加到 void(println 的返回值)。
          • @DaveJohnston 谢谢,我已经修好了 - 我想我需要再来一杯咖啡
          【解决方案6】:

          以下 sn-p 给出了一个示例,展示了如何从指定索引处的 List 获取元素,以及如何使用高级 for-each 循环遍历所有元素:

              import java.util.*;
          
              //...
          
              List<String> list = new ArrayList<String>();
              list.add("Hello!");
              list.add("How are you?");
          
              System.out.println(list.get(0)); // prints "Hello!"
          
              for (String s : list) {
                  System.out.println(s);
              } // prints "Hello!", "How are you?"
          

          注意以下几点:

          • 使用通用 List&lt;String&gt;ArrayList&lt;String&gt; 类型而不是原始 ArrayList 类型。
          • 变量名以小写开头
          • list被声明为List&lt;String&gt;,即接口类型而不是实现类型ArrayList&lt;String&gt;

          参考文献

          API:

          不要使用原始类型

          • JLS 4.8 Raw Types

            仅允许使用原始类型作为对遗留代码兼容性的让步。强烈反对在将泛型引入 Java 编程语言之后编写的代码中使用原始类型。 Java 编程语言的未来版本可能会禁止使用原始类型。

          • 有效的 Java 第 2 版:第 23 条:不要在新代码中使用原始类型

            如果您使用原始类型,您将失去泛型的所有安全性和表现力优势。

          在类型声明中优先使用接口而不是实现类

          • Effective Java 2nd Edition:Item 52:通过接口引用对象

            [...] 你应该倾向于使用接口而不是类来引用对象。 如果存在适当的接口类型,那么参数、返回值、变量和字段都应该使用接口类型声明

          Naming conventions

          变量:除变量外,所有实例、类和类常量的大小写混合,首字母小写

          【讨论】:

          • “混合大小写”也称为“驼峰大小写”。我更喜欢后者。
          【解决方案7】:

          你应该首先阅读collections framework tutorial

          但是要回答您的问题,您应该这样做:

          ArrayList<String> strings = new ArrayList<String>();
          strings.add("String1");
          strings.add("String2");
          
          // To access a specific element:
          System.out.println(strings.get(1));
          // To loop through and print all of the elements:
          for (String element : strings) {
              System.out.println(element);
          }
          

          【讨论】:

            【解决方案8】:

            如果您使用 Java 1.5 或更高版本,您可以使用:

            List<String> S = new ArrayList<String>();
            s.add("My text");
            
            for (String item : S) {
              System.out.println(item);
            }
            

            【讨论】:

              【解决方案9】:

              您可以通过索引 (System.out.println(S.get(0));) 获取字符串,也可以遍历它:

              for (String s : S) {
                System.out.println(s);
              }
              

              有关遍历列表的其他方法(及其含义),请参阅traditional for loop vs Iterator in Java

              另外:

              • 不应使用以大写字母开头的变量名
              • 你应该参数化你的数组列表:ArrayList&lt;String&gt; list = new ArrayList&lt;String&gt;();
              • 您应该熟悉 Java 广泛的 API 文档(又名 Javadoc),例如Java 5, Java 6

              【讨论】:

                【解决方案10】:

                这应该可以解决问题:

                String elem = (String)S.get(0);
                

                将返回数组中的第一项。

                或者

                for(int i=0 ; i<S.size() ; i++){
                     System.out.println(S.get(i));
                }
                

                【讨论】:

                • @dvd:忘记应该做什么,遵循@polygenelubricants 描述的正确编码实践和标准。以后你会感谢他的。
                • @Helen Neely:是的,我知道泛型并且在我的代码中越来越多地使用它们。我只是试图为这个问题提供简单的答案。当我看到其他提到泛型的答案时,我决定不复制它们。
                猜你喜欢
                • 2018-10-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-04-15
                • 1970-01-01
                • 2021-06-03
                相关资源
                最近更新 更多