Примитивные типы не допускаются в ArrayList, source. Частичное решение: вы можете обернуть prim.types, например int, в Integer, чтобы сформировать дополнительный класс, но побочный эффект. Я хочу индексировать данные, есть ли какой-то заменитель ArrayList, который допускает примитивные типы?Java: заменить ArrayList cos примитивными типами, недопустимыми в ArrayList?
ответ
Какую версию Java вы используете?
С 1,5 автобоксинга эта проблема спорная.
Вы можете сделать это:
List<Integer> x = Arrays.asList(1, 2, 3);
x.get(0) == 1; // this is true **WARNING** comments have pointed out this only works for Integers -128 to 127 due to integer caching. Use .equals
int foo = x.get(1); // this doesn't need a cast
x.add(4); // this doesn't need to be wrapped
Предполагая, что OP использует современную версию Java, это действительно единственный ответ. – Etaoin
используя 1.5, можете ли вы привести рабочий пример? поэтому у вас есть класс «Integer Integer {int i;} для Integer в« List
@HH нет, целое (оболочка) уже существует: (java.lang.Integer) вот простой рабочий пример: http: //stackoverflow.com/questions/2602038/java-substitute-for-arraylist-cos-primitive-types-not-allowed-in-arraylist/2602228#2602228 – OscarRyz
Есть ли какая-то замена для ArrayList, которая допускает примитивные типы?
К сожалению, нет. Дженерики в Java не поддерживают использование параметров примитивного типа. Параметр type должен быть классом.
Необходимо использовать один из классов-оберток, например Integer
, чтобы включить значения, которые первоначально были сохранены в примитивном типе.
Да пишите свое собственное воплощение. java.util.ArrayList имеет объект [] внутри. Вы пишете примитивные Список_массивы что-то вроде
MyIntArrayList имеющего ИНТА []
MyFloatArrayList, имеющий поплавок []
и т.д.,
В самом деле, вы можете скопировать всю реализацию JFC из ArrayList и измените Object [] на примитивный массив. Конечно, вы хотели бы удалить все дженерики и множество сложных/общих проверок, но основная логика остается такой же, как копия массива, рост размера массива и т. Д.,
Обобщения на Java и структура коллекции также работают на объектах, а не на примитивах. Мне любопытно, почему использование объектных версий (таких как Long и Integer) недостаточно для ваших нужд. Это связано с проблемами производительности?
Там нет структуры данных, которая делает именно то, что вы спрашиваете. Есть ли причина, по которой вы против использования классов-оболочек, таких как Character
или Integer
? Конечно, если вы просто хотите эффективно индексировать данные, вы всегда можете использовать базовый массив, например int[]
.
Вы можете также использовать сторонние библиотеки, см: Java Vector or ArrayList for Primitives
Если вы используете Java> 1.5, вы можете просто использовать Autoboxing, и все будет работать без проблем. В других случаях, вы можете использовать классы из Commons Primitives, как ArrayIntList
Он не поддерживает примитивы напрямую, но вы все равно можете использовать их благодаря «autoboxing»
Работа образца:
import java.util.List;
import java.util.ArrayList;
public class TestInt {
public static void main(String [] args) {
List<Integer> index = new ArrayList<Integer>();
index.add(100);
index.add(200);
index.add(300);
boolean b;
b = index.contains(100);
System.out.println(b);// prints true
b = index.contains(60);
System.out.println(b);// prints false.
}
}
Итак, вы должны не нужно заменить.
Но если вы по-прежнему настаивают на том, вы можете использовать: Apache commons primitives но видеть Pyrolistical предупреждение
Я бы не стал информировать людей об общих примитивах. Это действительное решение Java, которое должны использовать только эксперты. – Pyrolistical
@ Пиролистическое, как получилось? – OscarRyz
Это сторонняя библиотека, поэтому публичная библиотека классов не предназначена для этого, и вы вводите дополнительные накладные расходы для чтения кода. Вторые люди склонны думать, что OMG это быстрее, поэтому я буду использовать это только! Они преждевременно оптимизируются, и самая быстрая вещь, как правило, относится к самой простой вещи. Код не для компьютеров, чтобы работать быстро, код для людей, чтобы читать и понимать. Используйте стандартные библиотеки, и кто знает в будущем, возможно, JVM неожиданно улучшит производительность коллекции. Но вы не получите этого, если используете сторонние библиотеки. – Pyrolistical
Если вы не ограничены конкретной реализации, таких как ArrayList, вы можете найти trove library ПОЛЕЗНЫЕ.
В нем реализованы все базовые коллекции java, но с примитивными типами данных внутри.
Используйте, например, коллекции, предоставленные GNU Trove. Они имеют специализированные реализации для всех примитивных типов. В частности, для этих примитивных типов это много/быстрее/чем Java, в основном потому, что они не требуют бокса и распаковки и используют меньше памяти.
- 1. Java ArrayList в ArrayList
- 2. Заменить часть ArrayList другим ArrayList
- 3. Java: проблема со сканером/ArrayList типами
- 4. ArrayList в ArrayList в java
- 5. двухмерная ArrayList с различными типами
- 6. Являются примитивными типами данных потокобезопасными в Java
- 7. Как заменить содержимое arraylist содержимым другого arraylist?
- 8. объявить ArrayList с несколькими типами
- 9. ConfigurationElementCollection с примитивными типами
- 10. ArrayList с несколькими типичными типами?
- 11. Java Reflection вызова конструктора с примитивными типами
- 12. Java ArrayList из ArrayList нединамический
- 13. Класс Java Clone с примитивными типами
- 14. Java ArrayList бинарный поиск (ArrayList)
- 15. Java - Динамическое сравнение с примитивными типами данных
- 16. ConcurrentModificationException в Java ArrayList
- 17. Groovy interop с примитивными типами
- 18. Бинарный поиск с примитивными типами
- 19. Объявления Java ArrayList
- 20. Java Jsoup сравнить и заменить arraylist
- 21. добавить ArrayList к нескольким ArrayList в Java
- 22. Добавление 128 ArrayList в другой ArrayList - Java
- 23. Arraylist в Arraylist, unchecked error. Java
- 24. как объявить ArrayList из ArrayList в java
- 25. ArrayList of ArrayList из ints в Java?
- 26. как преобразовать ArrayList другого ArrayList в Java
- 27. java replace arraylist строк
- 28. Java (ArrayList)
- 29. JAVA - ArrayList
- 30. ArrayList, Java,
Один побочный эффект заключается в том, что класс Wrapper может быть «null». Я не уверен, как это интерпретируется с помощью autoboxing, поэтому убедитесь, что оно не дает числовое значение toString(). –