是否有可能擁有包含兩種不同類型數據的數組?我想要一個包含double和字符串的數組。我嘗試過:不同類型的數組
ArrayList<double><String> array;
但這並不奏效。
對不起,這個愚蠢的問題,但它已經有一段時間,因爲我已經使用了這樣的東西..你可以刷新我的記憶我將如何聲明和填充這樣一個數組?
然後再進一步,我想如果可能的話用double來排序數組?
謝謝!
是否有可能擁有包含兩種不同類型數據的數組?我想要一個包含double和字符串的數組。我嘗試過:不同類型的數組
ArrayList<double><String> array;
但這並不奏效。
對不起,這個愚蠢的問題,但它已經有一段時間,因爲我已經使用了這樣的東西..你可以刷新我的記憶我將如何聲明和填充這樣一個數組?
然後再進一步,我想如果可能的話用double來排序數組?
謝謝!
首先,它的價值是明確的數組和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;
}
}
然後創建一個ArrayList<DoubleAndString>
或DoubleAndString[]
。
現在,這種感覺有點像香草 - 大概雙重和字符串值實際上有更大的意義 - 例如名稱和分數。如果是這樣,請將其封裝在更適合描述配對的類型中。
至於排序 - 你可以使DoubleAndString
實施Comparable<DoubleAndString>
- 但除非這就是只有自然順序,這是有道理的,我會寫一個Comparator<DoubleAndString>
:
public class DoubleComparator implements Comparator<DoubleAndString>
{
public int compare(DoubleAndString ds1, DoubleAndString ds2)
{
return Double.compare(ds1.getDouble(), ds2.getDouble());
}
}
然後你可以使用Collections.sort
來對ArrayList<DoubleAndString>
或Arrays.sort
進行排序以對數組進行排序。
+1,beat'd。這將是我的建議和自定義數據類型。 – Robb 2010-05-12 01:53:47
這聽起來像你想要的地圖。既然你想排序Map,TreeMap可能是最優的。
Map<Double, String> myMap = new TreeMap<Double, String>();
地圖是關聯的。每個double都有一個關聯的字符串。如果你想每個雙人間多個字符串,你可以使用一個
Map<Double, ArrayList<String>>
你想做什麼?
如果它不是一個鍵值映射,你應該爲此創建新類。
好吧,如果你想與元素任意數量的數組,然後你只需要使用一個類型,它是一個共同的祖先兩者。在這種情況下,這將是Object(因爲String和Double都從Object繼承)。這將需要您檢查類型,但是,當您檢索或使用它們時。
如果您正在使用多個不同類型的固定號碼,那麼你真的想要的是一個「元組」。但是,Java目前沒有可用的元組實現。對於兩個項目:
public class Pair<T1,T2>
{
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;
}
你可以做ArrayList<object> arraylist
,然後你可以把任何東西在裏面,但是這可能不是你想要的。
然後進行排序,你只想用自己的比較,但正如theatrus提到的,應該是連接這兩個值,還是你有兩個不同的數據類型一維數組?
您可以使用ArrayList<Object>
,然後你可以使用任何你想。封裝double
在Double
對象,當你檢索對象使用instanceof
檢查,如果這真是一個double
或String
。
我必須說,這是不太可能在「設計」會爲你贏得任何獎項。是否有可能重新考慮您針對您的問題考慮的解決方案,並查看您是否可以採用其他類型的方法?
你可能已經知道這一點,但它不是肯定不會存儲不同類型的列表是一個好主意。根據定義,數組是一個類似對象的集合,並且填充所有類型,這使得事物變得模糊。所以你真的寧願有一個單獨的類型來保存這些不同的值。
根據定義,ArrayList僅在每個位置包含一個對象。你可以這樣做:
List<MyTuple> list = new ArrayList<MyTuple>();
public static class MyTuple implements Comparable<MyTuple> {
private Double doubleValue;
private String stringValue;
//getters and setters
public int compareTo(MyTuple tuple) {
return doubleValue.compareTo(tuple.getDoubleValue());
}
}
然後,您可以使用Collections.sort()方法按照雙精度對它進行排序。
你可能想看看Number基類。
List<Number> list = new ArrayList<Number>();
list.add(new Integer(3));
list.add(new Double(5.2));
你可以解釋這些數字作爲字符串,使用的NumberFormat:
NumberFormat formatter = new DecimalFormat("#.##");
String s = formatter.format(list.get(0));
雖然這可能不是你想要的,你是一個有點短關於你的最終目標的詳細信息。
如果你基本上沒有試圖做任何比較/對ArrayList的排序,那麼你可以創建如下的內容:
名單列表=新的ArrayList();
否則.. Jon Skeet的回答是最好的方法。
不,這是不可能的。你究竟想要做什麼?也許我們可以幫助您想出一個解決方法。 – 2010-05-12 01:49:38