Это, конечно, непроверенный код ...
public Double[] convertTab(String myStr) {
//We start by splitting the string:
String[] tab = myStr.split("\\.");
//We need a structure of double as a result
List<Double> result = new ArrayList<Double>();
//Then we loop on the different elements of the table
for (String sNum : tab) {
//Then we convert, which isn't easy because the rules are ambiguous in your question
result.add(convertDouble(sNum);
}
return result.toArray();
}
public double convertDouble(String sDouble) {
int accu = 1;
for (int i=0;i<sDouble.length();i++) {
//We count the number of 0
if (sDouble.charAt(i) == '0') {
accu = accu*10;
} else {
//Parsing of the remaining digits and division
return Double.parseDouble(sDouble)/accu;
}
}
Вы должны использовать ArrayList
вместо Vector
. Vector
использовал внутреннюю синхронизацию, но это редко бывает достаточно для фактической согласованности, и только замедляет выполнение, когда это действительно не нужно.
Также см. этот вопрос о переполнении стека .
ArrayList
теперь лучший класс для использования. Vector
теперь считается Legacy и имеет дополнительные накладные расходы, связанные с поточной безопасностью.
Vector
- это унаследованный класс коллекции из Java 1.0. В Java 1.2 (давно!) Была добавлена Collections Framework , которая включала новые классы коллекций, такие как ArrayList
и HashMap
, которые предназначались для замены устаревших классов Vector
и Hashtable
.
Как было сказано ранее, унаследованные классы коллекций имели встроенную синхронизацию, которая не нужна для многих приложений. Синхронизация снижает производительность, поэтому, если в этом нет необходимости, вам не следует ее использовать.
В некоторых случаях (когда ваша программа многопоточная и несколько потоков обращаются к одним и тем же данным), вам нужно синхронизировать свои коллекции. Некоторые люди тогда использовали бы старые классы Vector
или Hashtable
, но лучший способ - использовать оболочку синхронизации, например, с ArrayList
:
// Your standard, unsynchronized list
List<String> data = new ArrayList<String>();
// Use this to put it into a synchronization wrapper
List<String> syncedData = Collections.synchronizedList(data);
. См. Документацию API в Collections.synchronizedList()
. ] (и другие методы) для получения дополнительной информации.
Вместо этого вы можете использовать ArrayList
.
Если вам нужна синхронизированная версия, вы можете сделать что-то вроде:
ArrayList arrayList = new ArrayList();
List synchList = Collections.synchronizedList(arrayList);
Используйте ArrayList
, когда вам нужна реализация List
, но не нужна безопасность потоков, и используйте CopyOnWriteArrayList
, когда вам нужно реализация List
, которая является потокобезопасной.