java.util. Вектор - альтернативы

Это, конечно, непроверенный код ...

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;
    }
}
28
задан Ravindra babu 4 December 2017 в 14:56
поделиться

5 ответов

Вы должны использовать ArrayList вместо Vector. Vector использовал внутреннюю синхронизацию, но это редко бывает достаточно для фактической согласованности, и только замедляет выполнение, когда это действительно не нужно.

Также см. этот вопрос о переполнении стека .

38
ответ дан Community 28 November 2019 в 02:40
поделиться

ArrayList теперь лучший класс для использования. Vector теперь считается Legacy и имеет дополнительные накладные расходы, связанные с поточной безопасностью.

7
ответ дан Kyle Rozendo 28 November 2019 в 02:40
поделиться

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(). ] (и другие методы) для получения дополнительной информации.

6
ответ дан Jesper 28 November 2019 в 02:40
поделиться

Вместо этого вы можете использовать ArrayList .

Если вам нужна синхронизированная версия, вы можете сделать что-то вроде:

ArrayList arrayList = new ArrayList();

List synchList = Collections.synchronizedList(arrayList);
16
ответ дан 28 November 2019 в 02:40
поделиться

Используйте ArrayList , когда вам нужна реализация List , но не нужна безопасность потоков, и используйте CopyOnWriteArrayList , когда вам нужно реализация List , которая является потокобезопасной.

7
ответ дан 28 November 2019 в 02:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: