Java 添加数量不多的对象

Java 添加数量不多的对象,java,object,arraylist,tree,Java,Object,Arraylist,Tree,我有一个问题无法解决,我目前正在开发一个迷你文件系统,它需要创建大量的对象(理论上)。我当前尝试了ArrayList nodes=new ArrayList()

我有一个问题无法解决,我目前正在开发一个迷你文件系统,它需要创建大量的对象(理论上)。我当前尝试了
ArrayList nodes=new ArrayList()nodes.add(newinodedirectory(path[I])

但是当我稍后检查这个节点是否在
nodes
中被激活时,有没有关于如何解决这个问题或使用什么替代的建议

MiniFs类:

package se.kth.id1020.minifs;

import edu.princeton.cs.introcs.StdOut;
import java.util.HashMap;

public class MiniFs implements FileSystem {

  private final INodeDirectory root;
  private HashMap<String,Integer> map = new HashMap<String, Integer>();
  private int n = 0; //Number of objects created
  priate ArrayList<INode> nodes = new ArrayList<INode>();

  public MiniFs() {
    root = new INodeDirectory("/");
    map.put("/",n);
  }
  //Create a directory/folder
  @Override
  public void mkdir(String path) {
    String paths[] = path.split("/");
    if(paths.length == 2){
        nodes.add(new INode<directory(paths[paths.length - 1]));
        n++;
        map.put(paths[1],n);
        StdOut.println("OK.");
    }
    else{
        for(int i = 1; i < paths.length; i++){
            if(i == paths.length - 1){
                if(map.containsKey(paths[i])){
                    StdOut.println("Directory already excists");
                }
                else{
                    nodes.add(new INodeDirectory(paths[i]));
                    n++;
                    map.put(paths[i],n);
                    StdOut.println("OK.");
                }
            }
            else if(map.containsKey(paths[i]) == false){
                throw new UnsupportedOperationException("Error: you have to create " + paths[i] + " first!");
            }
        }
    }
  }
  //Create a file
  @Override
  public void touch(String path) {
    String paths[] = path.split("/");
    if(paths.length == 2){
        nodes.add(new INodeFile(paths[paths.length - 1]));
        n++;
        map.put(paths[paths.length - 1], n);
        StdOut.println("OK.");
    }
    else{
        for(int i = 1; i < paths.length; i++){
            if(i == paths.length - 1){
                if(map.containsKey(paths[i])){
                    StdOut.println("File already excists");
                } 
                else{
                    nodes.add(new INodeFile(paths[i]));
                    n++;
                    map.put(paths[i],n);
                    StdOut.println("OK.");
                }
            }
            else if(map.containsKey(paths[i]) == false){
                throw new UnsupportedOperationException("You have to create " + paths[i] + " first!");
            }
        }
    }
  }
  //Create a pointer to a file or directory
  @Override
  public void ln (String path, String target){
      String paths[] = path.split("/");
      String targets[] = target.split("/");
      if(paths.length == 2 && targets.length == 2 && map.containsKey(paths[1]) && map.containsKey(targets[1])){
          int pathIndex = nodes.indexOf(paths[1]);
          int targetIndex = nodes.indexOf(targets[1]);
          nodes.get(pathIndex).setPointer(nodes.get(targetIndex));
          StdOut.println("OK.");
      }
  }
}
污染等级:

package se.kth.id1020.minifs;

public class INodeFile extends INode {

  public INodeFile(String name) {
    super(name);
  }
}

对于放入
数组列表
并使用
检查的任何内容,您需要覆盖
.equals()
,并使用
.contains()
.indexOf()
进行检查

很容易让您的IDE来帮助实现这一点。我强烈建议您也实现
.hashCode()
,以防以后要使用
HashMap
(否则会遇到类似问题)


但是,您还有一个更严重的问题,那就是当您检查它是否在那里时,您正在将
字符串
传递给
indexOf()
,而不是
INode
。这将失败,因为列表不存储字符串。如果要检查节点是否存在,则需要从
字符串创建新节点,并检查该节点是否存在。

您正在尝试检查ArrayList是否包含INode类的特定实例。但是,您没有定义如何比较两个索引节点。ArrayList.contains()使用INode类的默认.equals()方法,除非在INode类中使用@Override重写它,否则该方法实际上不会工作。如果您使用的是Eclipse,则可以通过按Alt+Shift+S并选择“generate hashCode()and equals()”

轻松生成.equals()和.hashCode()函数,因为您没有重写INode类中的equals方法,所以我不希望contains起作用(除非您将它与要检查列表是否包含它的对象使用相同的引用)。但我并没有真正在我的
数组列表上使用
.contains()
,或者在使用
.getIndexOf()时使用
.contains()
是“秘密”的吗
?查找元素(如果有)。顺便说一句,我强烈建议不要创建一个
equals()
方法,该方法允许将
索引节点
字符串
进行比较,因为它会违反
无法解决问题,它仍然无法找到我的objects@Necrozze我也更新了答案,提到了
.indexOf()
,但原理相同。
package se.kth.id1020.minifs;

public class INodeDirectory extends INode {

  public INodeDirectory(String name) {
    super(name);
  }
}
package se.kth.id1020.minifs;

public class INodeFile extends INode {

  public INodeFile(String name) {
    super(name);
  }
}