回答
沒有O(1)操作將「String[]
」(使用數字字符串)「轉換」爲long[]
。如果循環可見或隱藏在某些第三方方法中,它將始終爲O(n)。
如果你不想「看」的循環,只是實現的方法
Long[] pseudoOneStepConversion(numbers);
和實施
privat Long[] pseudoOneStepConversion(String[] numbers) {
Long[] result = new long[numbers.length];
for (int i = 0; i < numbers.length; i++)
result[i] = Long.parseLong(numbers[i]);
return result;
}
我們可以做到這一點遞歸太 - 它仍然是O(n),性能較差並且看起來不像循環:
public static void main(String[] args) {
List<Long> target = new ArrayList<Long>();
copy(new String[]{"1", "2", "3"}, target, 0);
System.out.println(target);
}
private static void copy(String[] source, List<Long> target, int index) {
if (index == source.length)
return;
target.add(Long.parseLong(source[index]));
copy(source, target, index+1);
}
注 - 因爲我開始越來越downvotes的遞歸例子:這是純粹的學術,而不是inteded在生產代碼中使用 - 認爲,這是明確的;)
我認爲這不是時間複雜性,而是關於代碼的簡潔性。當我閱讀它時,OP在函數式編程中需要類似'map'的東西(我認爲Guava有類似的東西)。 – 2012-04-03 13:31:12
Java中不幸的是,循環是許多情況下最簡潔/可讀的形式。也許閉包會在Java 8中改變這種狀況。 – 2012-04-03 13:41:31
下投票,因爲在Java中,遞歸執行得更糟,然後執行純循環。 JVM JIT編譯器針對循環進行了優化,但目前沒有針對JVM中的尾遞歸進行優化(與Lisp和其他幾個VM不同)。 – 2012-04-04 17:18:59
沒有就沒有辦法做到這一點沒有環(即使你沒有明確編寫一個循環,你會叫會使用一種方法),除非你現在包含在String
long
值的數量和將它們手動添加到您的List
。
當然有:尾遞歸。當涉及到處理器層面時,*所有控制結構都轉到*。另外,如果輔助函數使用循環,我不認爲這會對OP造成問題,只要他不必通過重複迭代來監控他/她的代碼即可。 – 2012-04-03 13:31:32
隨着3rd party libraries一點點幫助,您可以避開編碼在你自己的代碼中循環,但是會有一個循環在某個地方。例如:
List<String> stringList = Arrays.asList(stringArray);
List<Long> longList = Lists.transform(stringList, new Function<String, Long>() {
public Long apply(String s) {
return Long.valueOf(s);
}
});
你最好的選擇是Guavas Lists.transform功能。
String[] stringArray = {"1999", "20000"};
List<String> stringList = Arrays.asList(stringArray);
List<Long> longList = Lists.transform(stringList,
new Function<String, Long>() {
Long apply(String value) {
return Long.valueOf(value);
}
});
注:當然番石榴必須做一個循環來實現這一點,但在你的代碼中沒有循環。
缺少一個'public',否則它與Eugene的答案令人驚訝地相似... – 2012-04-03 13:33:39
LOL :-)否我沒有複製它 – Zapodot 2012-04-03 13:36:42
Simplified Eugene回答Guava圖書館。自番石榴16.0。
List<Long> longList = Lists.transform(Arrays.asList(stringArray), Longs.stringConverter());
- 1. 使用字符串數組列表長度作爲整數
- 2. 轉換字符數組長整型
- 3. 在C++中使用指向無符號長整型而不是長長整型的指針
- 4. 將長整型轉換爲整數
- 5. Java的長整型
- 6. 傳遞整型或字符串數組作爲參數在Java
- 7. 整數類型長整數和分數
- 8. 不能轉換爲長整數字符串(類型錯誤)
- 9. 將長整型轉換爲PHP中的字符串
- 10. java Date Seralization:想要存儲長整型值而不是字符串表示
- 11. 如何在C++中將無符號長整型(DWORD)重新解釋爲有符號長整型?
- 12. java中的位運算符只用於整數和長整型?
- 13. 將整數數組轉換爲長整型
- 14. VLOOKUP值 - 字符串VS長(或整數)
- 15. Java字符串:用於分割長整數的遞歸解決方案將長整數分割爲固定長度的較小部分並將它們合併
- 16. 整型參數被解釋爲字符串參數在Java中
- 17. C++從文件中讀取字符,轉換爲長長整型
- 18. 將數據從長整型變爲寬整型
- 19. 型長Vs的類型長整型
- 20. 使用Java排序長整型TableRowSorter
- 21. 從無符號長整型轉換爲無符號整型
- 22. 如何將字節數組轉換爲兩個長整型值?
- 23. 不將字符串轉換爲整型
- 24. 不正確的結果,其使用無符號長長整型
- 25. CUDA atomicAdd()長長整型
- 26. freading 2字節長整型
- 27. 如何使用JAXB將長整型屬性作爲JSON字符串值返回
- 28. 模型不能解析字符串與組分隔符到長類型
- 29. 將字符串拆分爲數組(不等列長度)
- 30. 將正整數長整型值讀入數組
那麼這個數組包含'long's的字符串表示?你需要更具體,包括所需的輸入/輸出和你自己解決它的嘗試。 – 2012-04-03 13:24:48
最近問了一個[this]的重複(http://stackoverflow.com/questions/9993916/decompose-a-string-into-array-of-int-without-loop-java)。 – darrengorman 2012-04-03 13:27:44
@milkplusvellocet:不,另一個問題是關於將字符串解析爲一個整數的數組。這個問題是關於將字符串數組「轉換」爲長數組(不定義「轉換」部分) – 2012-04-03 13:29:45