【问题标题】:Create an array of ArrayList<String> elements创建 ArrayList<String> 元素的数组
【发布时间】:2011-05-31 18:08:07
【问题描述】:

我想创建一个包含 ArrayList 元素的数组。

我试过了

ArrayList<String> name[] = new ArrayList<String>()[];

但这似乎不起作用。

【问题讨论】:

  • 你想要一个数组列表。为什么你会在某种意义上使用数组而在其他意义上使用数组列表?
  • 我知道会有多少元素。使用arraylists的arraylist还是更好吗?

标签: java arrays arraylist


【解决方案1】:

您不能创建泛型类型的数组。

相反,您可以创建一个ArrayList&lt;ArrayList&lt;String&gt;&gt;

【讨论】:

【解决方案2】:

正确的做法是:

ArrayList<String> name[] = new ArrayList[9];

但是,这也行不通,因为你不能用泛型类型创建一个数组,你要做的是一个矩阵,这应该是这样的:

String name[][];

【讨论】:

  • 但第一个确实有效,但它显示了类型安全警告。
【解决方案3】:
ArrayList<ArrayList<String>> name= new ArrayList<ArrayList<String>>(/*capacity*/);

【讨论】:

    【解决方案4】:

    如果您确实需要 ArrayList 数组,则必须单独初始化数组的每个位置:

    int size = 9; // 9 is just an example
    // you can remove the annotation, but you'll be warned:
    // Type safety: The expression of type ArrayList[] needs unchecked conversion 
    // to conform to ArrayList<String>[]
    @SuppressWarnings("unchecked")
    ArrayList<String> name[] = new ArrayList[ size];
    for( int i = 0; i < size; i++) {
        name[ i] = new ArrayList<String>();
    }
    

    【讨论】:

      【解决方案5】:

      这不是正确的 OO,而且这种代码与实现非常耦合。 如果你需要做这样的事情,很可能你做错了什么。 如果代码不是你的,那么编写它的人可能做错了什么。

      如果您知道有多少元素(或者即使您不知道),为什么不使用Map&lt;Integer,List&lt;String&gt;&gt;

      【讨论】:

        【解决方案6】:

        我知道这有点老了,但无论如何我都会对此做出回应以供将来查看。

        如果你真的想要一个ArrayList&lt;String&gt;[] 结构,你可以简单地创建一个扩展 ArrayList 的类并创建一个该类的数组:

        public class StringArrayList extends ArrayList<String>{}
        

        在你的实现中:

        ArrayList<String> name[] = new StringArrayList[9];
        

        这是一个示例:

        package testspace.arrays;
        
        import java.util.List;
        
        public class TestStringArray {
        
            public static void main(String[] args) {
                List<String>[] arr = new StringArrayList[10];
                for(int i = 0; i < arr.length; i++){
                    // CANNOT use generic 'new ArrayList<String>()'
                    arr[i] = new StringArrayList(); 
                    for(int j = 0; j < arr.length; j++){
                        arr[i].add("list item #(" + j + "|" + i + ")");
                    }
                }
        
                StringBuilder sb = new StringBuilder();
                for(final List<String> list : arr){
                    for(final String str : list){
                        sb.append(str + " ");
                    }
                    sb.append("\n");
                }
                System.out.println(sb.toString());
            }
        
        }
        

        注意如果你改用这个,你会得到一个运行时错误:arr[i] = new ArrayList&lt;String&gt;()

        【讨论】:

          【解决方案7】:

          尽管我在数组中设置的限制小于添加的项目数量,但我已尝试此操作,但没有出现错误:

          package Testes.src;
          
          import java.util.ArrayList;
          import java.util.List;
          
          public class Testes {
          
              private List<String> name=new ArrayList<String>(1);
          
              public Testes(){
                  for (int i = 1; i <= 100; i++) {
                      name.add("Teste"+Integer.toString(i));
                  }
                  for (int i = 0; i < name.size(); i++) {
                      System.out.println(name.get(i));
                  }
              }
              public static void main(String [] args)
              {
                  Testes t1=new Testes();
              }
          }
          

          【讨论】:

            【解决方案8】:

            我知道这是一篇旧帖子,但有人刚刚问了同样的问题,由于没有人提到以下解决方案,所以在这里。

            解决它的一种方法可能是对象的二维数组(最近的问题是关于二维数组或 ArrayLists),然后您应该能够将 ArrayList 引用放入数组中。我还没有测试过,但是这样的东西应该可以工作。

            Object [][] data = new Object[5][5];
            data[0][0] = new ArrayList<String>(); // etc . . .
            

            【讨论】:

              【解决方案9】:

              你可以试试这个:

              ArrayList[] arr=new ArrayList[5];
              for(int i=0;i<5;i++)
                   arr[i]=new ArrayList<String>();
              arr[1].add("35");
              arr[1].add("ME");
              arr[1].add("HELLO");
              System.out.println(arr[1]);
              

              输出:

              [35, ME, HELLO]
              

              【讨论】:

                【解决方案10】:
                // This is the not correct way
                ArrayList<String> name[] = new ArrayList<String>()[];
                
                // This is the correct way
                ArrayList<String> list[] = new ArrayList[2];
                
                list[0] = new ArrayList();
                list[1] = new ArrayList();
                
                list[0].add("Some String 11");
                list[0].add("Some String 22");
                
                list[1].add("Some String 1111");
                list[1].add("Some String 2222");
                

                【讨论】:

                • 这是 7 年前的回答。你的回答带来了什么新价值?
                【解决方案11】:

                ArrayLists 的数组,带有循环的示例

                //Declare
                Object[] arrayLists = new Object[size];    
                
                //Fill
                for (int j=0; j < size; j++) {
                     arrayLists[k]= generateAnArrayList(j);  //or whatnot
                }
                
                //Usage
                for (int j=0; j < size; j++) {
                    ArrayList<Long> al = (ArrayList<Long>) arrayLists[j];
                    //do something here
                }
                

                【讨论】:

                  【解决方案12】:

                  有一种方法可以只对您的代码进行少量修改。

                  ArrayList<String>[] name = new ArrayList[10]; 
                  

                  这将为您提供一个 ArrayList 数组。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2013-05-27
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-08-02
                    • 1970-01-01
                    相关资源
                    最近更新 更多