【问题标题】:How I can access array elements of List如何访问 List 的数组元素
【发布时间】:2022-01-13 10:54:54
【问题描述】:

我有一个问题:

我有一个使用不同值填充的 List Java。例如,我有:

List<String[]> l = new ArrayList();
String[] lis = new String[3];
lis[0] = "A";
lis[1] = "B";
lis[2] = "C";
l.add(lis);

我也有其他价值观。 现在,我只想在此列表中的第一个字段中进行搜索。比如我想要A的indexOf。 我试着写了这段代码:

int index = l.indexOf("A");

但我得到 -1 作为回报。我想知道在加载数组时如何访问列表的字段。

【问题讨论】:

  • 列表默认随机插入,搜索是线性的。所以你必须搜索整个列表并在找到元素时返回
  • @Shriram 不,列表是有序的。

标签: java arrays list arraylist indexof


【解决方案1】:

我想要 A 的 indexOf。

不,你不能得到它,因为它是数组中的一个元素。数组没有 indexOf 方法。 List 有那个方法。

我想知道在加载数组时如何访问列表的字段。

String firstElem= l.get(0)[0]; 

get(0) 为您提供第一个插入的数组,而 [0] 为您提供该数组中的第一个 positiend 元素。

如果您正在寻找A 在数组中的位置,请使用l.get(0) 从列表中访问数组并遍历您获得的数组以获取A 的位置。

评论后更新:如果你不知道你有索引

for (int i = 0; i < l.size(); i++) {
        for (int j = 0; j < l.get(i).length; j++) {
            if( l.get(i)[j].equalsIgnoreCase("A")){
                return j;
            }
        }
    }

注意:将其作为示例代码并添加对空值、重复项等的检查...

【讨论】:

  • 我的问题是:如果我不知道索引“0”(因为我有大量数据),我如何根据我的第一个字段检索它?
  • @Musich87 在这种情况下,您需要遍历列表并再次遍历数组。循环和内循环。
  • 我看到了你的更新。我不想要数组索引,而是列表索引。例如,如果我的列表“A”、“B”、“C”和“D”、“E”、“F”中有两个数组,并且我搜索“D”,我想检索值 1,因为它是我列表中的第二个数组。如果我将“return j”更改为“return i”,您的代码就很好,对吧?谢谢苏雷什
  • @Musich87 没错。 :)return i。请记住,如果数组中存在重复条目,您将获得结果作为列表的第一个索引。例如:“D”和“D”。
  • 是的,我想要列表中值的第一个索引(例如“D”)。没关系!
【解决方案2】:

您的List 包含字符串数组 (String[])。我认为你的意思是创建一个List&lt;String&gt;

如果你真的想要List&lt;String[]&gt;,那么你的代码应该是这样的:

for(int i = 0; i < list.size(); i++)
{
    String[] array = list.get(i);
    for(String s : array)
    {
        if("A".equals(s))
        {
            return i;
        }
    }
}

【讨论】:

    【解决方案3】:
     List<String[]> l = new ArrayList<>();
     String[] lis = new String[3];
     lis[0] = "A";
     lis[1] = "B";
     lis[2] = "C";
     l.add(lis); //  now your list have only one element and it's index is 0
    

    您的列表中没有“A”。所以l.indexOf("A") 会返回-1

    “A”现在在哪里?

    l.get(0)[0] // l.get(0) is lis array. Then 0th element of lis is A
    

    如果你想以这种方式获取索引,你可以使用

    String[] lis = new String[3];
    lis[0] = "A";
    lis[1] = "B";
    lis[2] = "C";        
    
    int index= Arrays.asList(lis).indexOf("A");
    System.out.println(index);
    

    输出:

    0
    

    【讨论】:

      【解决方案4】:

      在您l.add(lis); 之后,您的列表l只有一个 元素:String[] lis不是数组的 n 个元素

      你通过indexOf检查列表中的字符串"A",它返回-1,说,不,我没有那个元素。

      您可能需要检查Arrays.asList() 方法,它将数组转换为List。我想这就是你想要的。

      【讨论】:

        【解决方案5】:

        你想这样做:

        List<String> l = new ArrayList();
        String[] lis = new String[3];
        lis[0] = "A";
        lis[1] = "B";
        lis[2] = "C";
        l.addAll(lis);
        

        或者你根本不必使用数组

        List<String> l = new ArrayList();    
        l.add("A");
        l.add("B");
        l.add("C");
        

        在您的情况下,您有数组列表,而不是字符串列表。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-09
          • 2020-11-03
          • 1970-01-01
          相关资源
          最近更新 更多