【问题标题】:accessing instance list of class [closed]访问类的实例列表[关闭]
【发布时间】:2020-11-01 05:29:27
【问题描述】:

我是 Java 新手,我有一个关于如何详细访问类的实例列表的问题。 (我真的需要你的帮助!)

假设我们有成对的数字,例如 (1 2)、(3 4)、(5 6)、(5 3)、(1 5)。 对于每一对,我们将第一个视为头部,将最后一个视为尾部(例如 1->head 和 2->tail)。每次我们从输入中得到一个pair或node时,我们都会将该pair存储到一个Nodelist中。

这是我想问的问题。 有没有其他方法可以只访问节点列表中的头?例如,考虑具有这对 (1 5) 的最后一个节点。我们将 1 称为 lastnode.head 并将 5 称为 lastnode.tail。 我现在要做的是检查 lastnode.head(1) 是否在 Nodelist 中。在 Nodelist 中,我们已经有 (1 2) 节点。然后我们将 (1 2) 存储到一些 DS 中。之后,这一次,我们检查 Nodelist 中的 lastnode.tail(5)。请注意,我们有两对 (5 6) 和 (5 3),当我们过牌时,我们只考虑节点列表中的正面。由于 (5 6) 先于 (5 3),我们依次存储 (5 6) 和 (5 3)。

关于这个问题有什么建议或想法吗?提前致谢。

【问题讨论】:

    标签: java list class arraylist


    【解决方案1】:

    我想你有某种对类,让我们这样说:

    class MyPair {
        public int head, tail;
        
        public MyPair(int head, int tail) {
            this.head = head;
            this.tail = tail;
        }
    
        ...
    }
    

    非常标准的方法是使用 for 循环并根据您要查找的内容比较每对的变量。例如,假设您创建了一个填充了一些元素的 ArrayList:

    List<MyPair> myList = new ArrayList<>();
    myList.add(new MyPair(1, 2));
    myList.add(new MyPair(3, 4));
    ...
    

    然后,您可以像这样使用 for 循环:

    boolean containsHead(List<MyPair> list, int value) {
        for(MyPair pair : list) {
            if(pair.head == value) {
                return true;
            }
        }
        return false;
    }
    

    用法:

    containsHead(myList, 3);
    >> true
    

    你可以对尾巴做非常相似的方法。

    另一种方法是更改​​您的结构,例如,您可以使用“列表对”而不是使用对列表 - 创建 2 个列表,如下所示:

    List<Integer>
        heads = new ArrayList<>(),
        tails = new ArrayList<>();
    
    heads.add(1);
    tails.add(2);
    ...
    

    用法:

    tails.contains(2);
    >> true
    

    我想到的最后一种方法,但我不建议使用,是覆盖 equals 方法,使您的类表现为您设置的任何一项。

    class MyPair {
        public int head, tail;
        
        public MyPair(int head, int tail) {
            this.head = head;
            this.tail = tail;
        }
        
        private static boolean asHead = true;
        
        public static MyPair searchOf(int x) {
            return new MyPair(x, x);
        }
        
        public static void behaveAsHead() {
            asHead = true;
        }
        
        public static void behaveAsTail() {
            asHead = false;
        }
        
        @Override
        public boolean equals(Object other) {
            if (other instanceof MyPair) {
                MyPair otherPair = (MyPair) other;
                return asHead ? (head == otherPair.head) : (tail == otherPair.tail);
            }
            return false;
        }
    }
    

    用法:

    // search for tail of value 4
    MyPair.behaveAsTail();
    myList.contains(MyPair.searchOf(4));
    >> true
    

    【讨论】:

      猜你喜欢
      • 2018-07-06
      • 2020-11-04
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 2011-12-15
      • 2016-11-20
      • 2013-04-11
      • 2012-06-17
      相关资源
      最近更新 更多