亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何指定一個同時匹配 String 和 long 的類型?

如何指定一個同時匹配 String 和 long 的類型?

繁花不似錦 2021-12-22 16:06:55
情況是我有一個函數,它調用Arrays.sort對給定數組進行排序。由于Arrays.sort可以對 String 和 long 進行排序,我想使用一個簽名而不是兩個String[] array和long[] array。我試過類似的東西Comparable[],它不會匹配long[]。我也嘗試更改long為Long. 但是裝箱和拆箱的過程顯著減慢了排序。所以我想知道是否有一種我可以指定匹配它們的類型?或者通常匹配所有支持的類型Arrays.sort?
查看完整描述

2 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

簡短的回答是否定的,你不能。


Comparable是一個接口和對象/類系統的一部分。一個原語,例如long,不是該系統的一部分,只是它的盒裝變體Long。


不幸的是,您甚至無法使用泛型來解決這個問題,因為它們也只能應用于類,而不能應用于基元(請參閱為什么 Java 泛型不支持基元類型?)。


因此,在Project Valhalla(值類型)發布之前,如果您想避免自動裝箱,您將需要為所有 8 個原語(short, int, long, byte, char, float, double, boolean)提供硬編碼的變體,這是沒有辦法的。


Java API 也必須這樣做。您會看到Arrays#sort所有相關原語的重載方法和類的一個泛型重載。從它的文檔:


sort(byte[] a)

sort(char[] a)

sort(double[] a)

sort(float[] a)

sort(int[] a)

sort(long[] a)

sort(short[] a)

sort(Object[] a)

sort(T[] a, Comparator<? super T> c)


查看完整回答
反對 回復 2021-12-22
?
米脂

TA貢獻1836條經驗 獲得超3個贊

情況是我有一個函數,它調用Arrays.sort對給定數組進行排序。由于Arrays.sort可以同時對Stringand進行排序long,我想使用一個簽名而不是兩個String[]數組和 long[]數組。


可以像這樣嘗試方法重載。


public static void main(String [] args) {

    String [] strs = {"c", "x", "a", "d"};

    long [] ints = {4L, 343660L, 99L, 0L};

    Testing t = new Testing();

    t.sortMyArray(strs);

    t.sortMyArray(ints);

    System.out.println(Arrays.toString(strs)); // [a, c, d, x]

    System.out.println(Arrays.toString(ints)); // [0, 4, 99, 343660]

}


private void sortMyArray(long[] myArray) {

    Arrays.sort(myArray);

}


private void sortMyArray(String[] myArray) {

    Arrays.sort(myArray);

}


查看完整回答
反對 回復 2021-12-22
  • 2 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號