如何在同一队列中同时插入字符串和整数?
请看下面的程序,我已经创建了两个对象(q
,q1
)。我们可以在一个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();
}
}
答案 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);