List 确保一个对象仅在一个列表中

List 确保一个对象仅在一个列表中,list,reference,reference-counting,List,Reference,Reference Counting,我被一个相当基本的问题困住了 我需要确保一个对象只在一个列表中。 e、 g.我有两个列表(伪代码): 我如何确保此人处于以下状态: 没有名单 列出等待咖啡或咖啡 列表等待fortee 但不能同时出现在展位列表中。 我是否需要确保在我的代码中,或者已经存在一些东西? 设计模式?您可以使用一套 static HashSet<String> set = new HashSet<String>(); public static void add(ArrayList<Stri

我被一个相当基本的问题困住了

我需要确保一个对象只在一个列表中。 e、 g.我有两个列表(伪代码):

我如何确保此人处于以下状态:

  • 没有名单
  • 列出等待咖啡或咖啡
  • 列表等待fortee
  • 但不能同时出现在展位列表中。 我是否需要确保在我的代码中,或者已经存在一些东西? 设计模式?

    您可以使用一套

    static HashSet<String> set = new HashSet<String>();
    public static void add(ArrayList<String> array, String s)
    {
        if(!set.contains(s))
        {
            array.add(s);
        }
    }
    
    static HashSet=new HashSet();
    公共静态void add(ArrayList数组,字符串s)
    {
    如果(!set.contains)
    {
    数组。添加(s);
    }
    }
    
    Set只能有唯一的元素,contains()是O(1),所以您不需要担心运行时。如果您想知道如何检查而不是添加,您可以循环一个数组并将其所有元素添加到集合中。然后可以循环第二个数组,查看集合是否包含元素。如果是,则返回true,然后重复

    希望这有帮助

    您可以让“人员”处理列表分配:

    public class Person{
    
        private List currentList = null;
    
        public void addToList(List newList){
    
            if (newList == null  || newList == currentList) {
                return;
            }
    
            if (currentList != null){
                currentList.remove(this);
            }
    
            currentList = newList;
            newList.add(this);
    
        }
    
    }
    

    检查两个列表的交集是否为空。您在这里使用的是哪种编程语言?您可以检查两个列表的交集,如果它为空,则表示他要么在其中一个列表中,要么不在其中。这与您的实现无关,但我将创建一个Person对象,其中包含一些字段,用于存储等待咖啡/等待tee的状态。然后我会重写hashcode/equals方法,将这些对象放在一个集合中:)@gipinani我还想亲自创建一个字段,在这里我可以保存信息,无论它是在“waitingForCoffe”还是在“waitingForTee”中。因此,我可以使用此信息从一个列表中删除对象,然后再将其添加到另一个列表中。但对我来说,这似乎是一种黑客行为,我认为这类案例必须有一种设计模式。因为我不止有两个列表(有很多人),我担心交叉点会给我带来性能问题。你也可以使用list contains()方法。ApacheCollectionUtils可能更符合您的需要。我不知道设计模式是否能代表您所需要的,但您可以将所有逻辑隐藏在一个类中,该类在内部处理列表/集合,并使用一些公共方法返回who is where
    public class Person{
    
        private List currentList = null;
    
        public void addToList(List newList){
    
            if (newList == null  || newList == currentList) {
                return;
            }
    
            if (currentList != null){
                currentList.remove(this);
            }
    
            currentList = newList;
            newList.add(this);
    
        }
    
    }