【问题标题】:How to get the size of an index in an arraylist? [closed]如何获取数组列表中索引的大小? [关闭]
【发布时间】:2026-01-17 16:30:01
【问题描述】:

我正在编写一个代码,大部分都完成了,只是这两行有问题,我会完成的。这样做的正确方法是什么?我想我把 Arrays 和 ArrayLists 搞混了,请帮忙

    private final int MAX = 100000;
    private ArrayList<Integer> adj = new ArrayList(MAX);
    private boolean[] visited = new boolean[MAX];

    private void dfsFirst(int u) {
        if (visited[u]) {
            return;
        }

        visited[u] = true;

        for (int i = 0; i < adj[u].size(); i++) {   //issue here with adj
            dfsFirst(adj[u].get(i));                //issue here with adj
        }
        s.push(u);
    }

这是我试图翻译成 Java 的原始代码 https://www.geeksforgeeks.org/2-satisfiability-2-sat-problem/

【问题讨论】:

  • 是的,adj 是一个列表,您可以使用adj.get(i)/adj.size() 获得内容。 s 未在此处的示例中定义。
  • 索引大小是什么意思? for 循环的目的是什么,其中 dfsFirst 使用 adj 数组中的 value 递归调用,而输入参数 u 应该是索引?
  • @AlexRudenko 看看我的编辑,看看我想要做什么,谢谢

标签: java arrays arraylist indexing size


【解决方案1】:

在 Kosaraju 算法的reference C++ implementation 中,adj 必须是整数列表数组:

vector<int> adj[MAX]; 
vector<int> adjInv[MAX]; 

因此,在 Java 中应该是:

private final int MAX = 100000;
private List<Integer>[] adj = new List[MAX];
private boolean[] visited = new boolean[MAX];
private Stack<Integer> s = new Stack<>();

private void dfsFirst(int u) {
    if (visited[u]) {
        return;
    }

    visited[u] = true;

    for (int i = 0; i < adj[u].size(); i++) {   // getting size of the list at `u`
        dfsFirst(adj[u].get(i));               
    }
    s.push(u);
}

【讨论】:

    最近更新 更多