不同类型的数组

是否可以拥有包含两种不同类型数据的数组? 我想要一个包含double和字符串的数组。 我尝试过:

ArrayList array; 

但那没用。

抱歉这个愚蠢的问题,但已经有一段时间了,因为我使用过这样的东西..你能否刷新我的内存,我将如何声明和填充这样的数组?

然后再进一步,如果可能的话,我想用双排序数组?

谢谢!

首先,值得清楚的是数组和ArrayList之间的区别 – 它们根本不是一回事。

但是,无论哪种情况,你都无法做到你想要的。 你可能来的最接近的是声明你自己的类型。 (编辑:我的原始代码有一个双字符串一个字符串……我现在把它改成了一个双字符串。请告诉我这个改变是不是你想到的。)

 public final class DoubleAndString { private final String stringValue; private final double doubleValue; public DoubleAndString(String stringValue, double doubleValue) { this.stringValue = stringValue; this.doubleValue = doubleValue; } public String getString() { return stringValue; } public String getDouble() { return doubleValue; } } 

然后创建一个ArrayListDoubleAndString[]

现在,这感觉有些香草 – 大概是双重和字符串值实际上有更大的意义 – 例如名字和分数。 如果是这样,将其封装在更恰当地描述配对的类型中。

至于排序 – 你可以使DoubleAndString实现Comparable – 但除非这是唯一有意义的自然顺序,否则我会编写一个Comparator

 public class DoubleComparator implements Comparator { public int compare(DoubleAndString ds1, DoubleAndString ds2) { return Double.compare(ds1.getDouble(), ds2.getDouble()); } } 

然后,您可以使用Collections.sortArrayListArrays.sort进行排序以对数组进行排序。

您可以使用ArrayList ,然后您可以使用您想要的任何内容。 将Double封装在Double对象中,当您检索对象时,使用instanceof来检查它是否真的是doubleString

我必须说,这种“设计”不太可能赢得任何奖项。 是否有可能重新考虑您正在为您的问题考虑的解决方案,并看看您是否可以采用不同的方法?

您可能已经知道这一点,但在列表中存储不同类型并不是一个好主意。 根据定义,数组是类似对象的集合,并且其中的各种填充使得事物模糊。 所以你真的想要一个单独的类型来保存这些不同的值。

听起来你想要一张地图。 由于您希望对Map进行排序,因此TreeMap可能是最佳的。

 Map myMap = new TreeMap(); 

地图是关联的。 每个double都有一个相关的字符串。 如果你想要每个双重多个字符串,你可以使用a

 Map> 

好吧,如果你想拥有一个包含任意数量元素的数组,那么你只需要使用一个共同祖先的类型。 在这种情况下,那将是Object(因为String和Double都从Objectinheritance)。 但是,当您检索或使用它们时,这将要求您检查类型。

如果你使用固定数量的多种不同类型,那么你真正想要的是一个“元组”。 但是,Java目前没有可用的元组实现。 两个项目:

 public class Pair { public Pair(){ this(null,null); } public Pair(T1 x1){ this(x1,null); } public Pair(T1 x1, T2 x2){ _x1 = x1; _x2 = x2; } public T1 getFirst(){ return _x1; } public T1 getSecond(){ return _x2; } private T1 _x1; private T2 _x2; } 

你可以只做ArrayListarraylist然后你可以放任何东西,但这可能不是你想要的。

那么,为了排序你只需要使用你自己的比较器,但是,如上所述,这两个值应该是连接的,还是你有一个具有两种不同数据类型的单维数组?

根据定义,ArrayList每个位置只包含一个对象。 你可以这样做:

 List list = new ArrayList(); public static class MyTuple implements Comparable { private Double doubleValue; private String stringValue; //getters and setters public int compareTo(MyTuple tuple) { return doubleValue.compareTo(tuple.getDoubleValue()); } } 

然后,您可以使用Collections.sort()方法按双打对其进行排序。

你想让我做什么?

如果它不是键值映射,则应为此创建一个新类。

您可能想要查看Number基类。

 List list = new ArrayList(); list.add(new Integer(3)); list.add(new Double(5.2)); 

您可以使用NumberFormat将数字解释为字符串:

 NumberFormat formatter = new DecimalFormat("#.##"); String s = formatter.format(list.get(0)); 

虽然这可能不是您想要的,但您对最终目标的详细信息有点缺失。

如果您基本上没有尝试对ArrayList进行任何比较/排序,那么您可以创建如下内容:

List list = new ArrayList();

否则.. Jon Skeet的答案是最好的方法。