【问题标题】:How to access a specific element while using a List of a List of a primitive data type in Java如何在 Java 中使用原始数据类型列表的列表时访问特定元素
【发布时间】:2017-01-06 07:06:52
【问题描述】:

我最近开始使用邻接矩阵处理图,虽然 2D 整数数组通常足以用于加权图,但存在一个特殊问题,即每当我访问行 m 的元素时, n 列,我必须删除该行和列。由于只能(很容易)在列表中删除,因此我尝试切换到具有列表列表的数据结构,但很快意识到我无法单独访问单个列表的元素。这是一个澄清的例子-

import java.util.*;
public class List_Of_List_Example
{
    static List list1=new ArrayList<List>();
    public static void main(String[]args)
    {
       List lt1=new ArrayList(Arrays.asList(1,2,3));
       list1.add(lt1);
       List lt2=new ArrayList(Arrays.asList(4,5,6));
       list1.add(lt2);
       List lt3=Arrays.asList(list1.get(0));
       System.out.println(lt3.get(0));//Outputs [1,2,3]
    }
}

在上面的代码中,我希望能够在从主列表中获取特定列表后访问 lt3 的每个单独元素。关于如何解决此问题的任何想法?

谢谢

P.S 即使我尝试使用整数数组列表,同样的问题仍然存在。

【问题讨论】:

  • 如果您正在使用图表,那么我建议您专门使用该数据结构。列表是图表,但图表不一定是列表。
  • 无论如何我可以快速删除行和列?@TimBiegeleisen
  • 不相关: 1) 您不能拥有“Java 中原始数据类型列表的列表”。 List 不能存储原始值。 2) 不要使用 raw 泛型类型。 List 是一个很大的禁忌。它应该是List&lt;Integer&gt; lt1List&lt;List&lt;Integer&gt;&gt; list1。 3) 原语int1, 2, ... 被编译器自动装箱为Integer

标签: java arrays object arraylist graph


【解决方案1】:

代替

List lt3=Arrays.asList(list1.get(0));

List lt3=list1.get(0);

但不要忽视 cmets。它们更重要。

【讨论】:

    【解决方案2】:

    分配给lt3时不要调用Arrays.asList()

    另外,不要使用 raw 泛型类型。

    这是您的固定代码,其中指定了泛型类型参数:

    static List<List<Integer>> list1 = new ArrayList<>();
    public static void main(String[] args) {
        List<Integer> lt1 = new ArrayList<>(Arrays.asList(1,2,3));
        list1.add(lt1);
        List<Integer> lt2 = new ArrayList<>(Arrays.asList(4,5,6));
        list1.add(lt2);
        List<Integer> lt3 = list1.get(0); // Same as lt1
        System.out.println(lt3.get(0)); // Outputs 1
    }
    

    【讨论】:

      【解决方案3】:

      其他解决方案。 :-)

      static ArrayList<ArrayList<Integer>> list1 = new ArrayList<ArrayList<Integer>>(); 
      
      public static void main(String[] args) {
          //departFile();
          ArrayList<Integer> lt1 = new ArrayList<Integer>();
          lt1.add(1);
          lt1.add(2);
          lt1.add(3);
          list1.add(lt1);
      
          ArrayList<Integer> lt2 = new ArrayList<Integer>();
          lt2.add(4);
          lt2.add(5);
          lt2.add(6);
          list1.add(lt2);
      
          ArrayList<Integer> lt3 = new ArrayList<Integer>();
          lt3.addAll(list1.get(0));
          list1.add(lt3);
      
          System.out.println("[1][CHECK ITEMS of lt3]");
          for(int i=0; i<lt3.size(); i++) {
              System.out.println("lt3["+i+"] = " + lt3.get(i));
          }
      
          System.out.println("\n[2][CHECK ITEMS of list1]");
          for(int row=0; row<list1.size(); row++) {
              ArrayList<Integer> rowItem = list1.get(row);
      
              System.out.print("row "+row+" :: ");
              for(int col=0; col<rowItem.size(); col++) {
                  System.out.print("[" + rowItem.get(col) + "]");
              }
              System.out.print("\n");
          }
      
          System.out.println("\n[3][REMOVE ITEM of list1]");
          list1.get(2).remove(1);     // remove item index 1 of lt3 
      
          for(int row=0; row<list1.size(); row++) {
              ArrayList<Integer> rowItem = list1.get(row);
      
              System.out.print("row "+row+" :: ");
              for(int col=0; col<rowItem.size(); col++) {
                  System.out.print("[" + rowItem.get(col) + "]");
              }
              System.out.print("\n");
          }
      }
      

      [结果]

      [1][CHECK ITEMS of lt3]
      lt3[0] = 1
      lt3[1] = 2
      lt3[2] = 3
      
      [2][CHECK ITEMS of list1]
      row 0 :: [1][2][3]
      row 1 :: [4][5][6]
      row 2 :: [1][2][3]
      
      [3][REMOVE ITEM of list1]
      row 0 :: [1][2][3]
      row 1 :: [4][5][6]
      row 2 :: [1][3]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-19
        • 2017-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-13
        相关资源
        最近更新 更多