【问题标题】:How do I check if an element exists in a queue ( LinkedList ) before adding it?如何在添加元素之前检查队列 ( LinkedList ) 中是否存在元素?
【发布时间】:2021-06-29 08:24:28
【问题描述】:

如何在添加元素之前检查队列 ( LinkedList ) 中是否存在元素?

前: 地址 [id=1, url=https://www.google.com, size=2, queue=[request [requestId=1], request [requestId=2]]]

我无法添加 queue=[request [requestId=1], request [requestId=1]],因为它们具有相同的 requestId。

【问题讨论】:

  • 使用包含方法
  • 或者,如果您需要经常执行检查并且队列可能很大,您可以使用LinkedHashMap

标签: java queue


【解决方案1】:

你可以使用contains(Object o)方法

包含说明:

如果此列表包含指定元素,则返回 true。更多的 正式地,当且仅当此列表包含至少一个时才返回 true 元素 e 使得 (o==null ? e==null : o.equals(e))。 [...]

参数:o – 待测试在此列表中存在的元素

返回:如果 此列表包含指定的元素

【讨论】:

    【解决方案2】:

    以下代码可能对您有所帮助...

    package com.example.Solution;
    
    import java.util.LinkedList;
    import java.util.Queue;
    
    public class Sol {
        public static void main(String[] args){
            Queue<Address> q1= new LinkedList<>();
            q1.add(new Address("abc",1,"url1"));
            Address a1=new Address("abc",1,"url");
            if(!q1.contains(a1))
                q1.add(a1);
            Address a2=new Address("abc",2,"url");
            if(!q1.contains(a2)){
                q1.add(a2);
            }
            Address a3=new Address("abc",1,"url2");
            if(!q1.contains(a3)){
                q1.add(a3);
            }
            System.out.println(q1.size());
        }
    }
    class Address {
        String name;
        int id;
        String url;
    
        public Address(String name, int id, String url) {
            this.name = name;
            this.id = id;
            this.url = url;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
        public boolean equals(Object o1){
            Address address=(Address) o1;
            return address.getId()==this.id;
        }
    }
    
    

    【讨论】:

      【解决方案3】:

      LinkedList 实现了Collection 接口,该接口定义了Collection#contains 方法。

      只需使用contains 方法,您就可以轻松使用派生自Collection 的任何类。

      有关详细信息,请参阅LinkedList#contains 上的文档。

      注意:它使用Objects#equals 来确定项目是否在Collection 中。

      如果你有相同的参考,我想你会很好。如果不同的引用代表相同的数据,那么您可能需要对您的对象使用@Overrideequals 方法。

      【讨论】:

        猜你喜欢
        • 2015-10-14
        • 2020-04-20
        • 1970-01-01
        • 1970-01-01
        • 2019-10-04
        • 2021-12-17
        • 2012-11-20
        相关资源
        最近更新 更多