如何在同一队列中同时插入String和Integer以及任何数据类型?

时间:2018-08-08 07:21:46

标签: java collections queue

如何在同一队列中同时插入字符串和整数?

请看下面的程序,我已经创建了两个对象(qq1)。我们可以在一个Queue中插入字符串和整数吗?

import java.util.*;
public class Solution {
   public void myMethod() {
      Queue<Integer> q=new PriorityQueue<>();
      Queue<String> q1=new PriorityQueue<>();
      q.add(3);
      q1.add("Eswar");
      System.out.println(q);
      System.out.println(q1);
   }

   public static void main(String...args) {
      Solution s=new Solution();
      s.myMethod();
   }
}

4 个答案:

答案 0 :(得分:0)

您可以:

Queue<Object> q=new PriorityQueue<>();

但是您现在必须关心正确的类型。

答案 1 :(得分:-1)

您可以在没有泛型的情况下执行此操作,但不建议这样做,因为您可能会遇到运行时异常:

List list = new ArrayList();
list.add("Hi");
String s = (String) list.get(0);

答案 2 :(得分:-1)

不建议在同一Collection中使用Generics或RawType在Object中使用两种不同类型,因为这可能会导致运行时错误,

选项1 -尝试将Integer也保持在String表示形式中如果您符合目的,

Queue<String> q1=new PriorityQueue<>();
q1.add(String.valueOf(1));
q1.add("Eswar");
System.out.println(q1);

选项2 -创建自己的类型(包含两者),如果只需要使用enum,则可以通过PriorityQueue进行管理。请注意,您必须添加自己的Comparator

数据类型的枚举

enum DataType{
    INTEGER,
    STRING
}

您自己的数据类型类

class MyData implements Comparable<MyData>{

    private Integer intValue;
    private String stringValue;
    private DataType type;

    public MyData(Integer intValue) {
        this.intValue=intValue;
        type=DataType.INTEGER;
    }

    public MyData(String stringValue) {
        this.stringValue=stringValue;
        type=DataType.STRING;
    }

    public Integer getIntValue() {
        return intValue;
    }

    public String getStringValue() {
        return stringValue;
    }

    public DataType getType() {
        return type;
    }

    @Override
    public String toString() {
        return type==DataType.INTEGER?intValue.toString():stringValue;
    }

    @Override
    public int compareTo(MyData data) {
        //Add your comparator here based on your criteria
        return 0;
    }

}

以及实施

Queue<MyData> q1=new PriorityQueue<>();
q1.add(new MyData(1));
q1.add(new MyData("Eswar"));
System.out.println(q1);

答案 3 :(得分:-3)

使用Queue<Object>可以添加所需的任何类型,因为Object是每一个的替代。但是您不能使用任何实现,例如PriorityQueue,因为它需要在元素上使用sort,并且不同的类型不能一起使用。 ArrayDeque会很好。

Queue<Object> q = new ArrayDeque<>();
q.add(5);
q.add("Foo");
q.add(5d);

Workable Demo