Java преобразовать объект [] массив в вектор
каков наилучший способ преобразования массива объектов в вектор?
JDE
public Vector getListElements()
{
Vector myVector = this.elements;
return myVector;
}
этого.elements-это объект[]
спасибо, Райт!--3-->
Я должен уточнить свой вопрос
моя целевая платформа-blackberry.
коллекции не поддерживаются. Матрица.asList () также не является :/
Полный Класс
package CustomElements;
import net.rim.device.api.ui.component .*;
import net.rim.device.api.collection.util.*;
import net.rim.device.api.util.*;
import java.util.*;
public class ContactsList extends SortedReadableList implements KeywordProvider
{
// Constructor
public ContactsList(Vector contacts)
{
super(new ContactsListComparatorByFirstName());
loadFrom(contacts.elements());
}
// Add Element to ContactsSortedReadableList
void addElement(Object element)
{
doAdd(element);
}
public Vector getListElements()
{
return new Vector(Collection
Vector test = this.getElements();
}
// getKeywords
public String[] getKeywords(Object element)
{
return StringUtilities.stringToWords(((Contact)element).get_contactFirstName());
// return StringUtilities.stringToWords(element.toString());
}
// Comparator sorting Contact objects by name
final static class ContactsListComparatorByFirstName implements Comparator
{
public int compare(Object o1, Object o2)
{
// Sticky Entries Implementation
if(((ContactsListObject)o2).getSticky())
{
return 1;
} else
if (((ContactsListObject)o1).getSticky())
{
return -1;
} else
{
if(((ContactsListObject)o1).get_contactFirstName().compareTo(((ContactsListObject)o2).get_contactFirstName()) <0)
{
return -1;
}
if(((ContactsListObject)o1).get_contactFirstName().compareTo(((ContactsListObject)o2).get_contactFirstName()) >0)
{
return 1;
}
else
{
return 0;
}
}
}
}
}
6 ответов
return new Vector(Arrays.asList(elements));
теперь может показаться, что вы копируете данные дважды, но это не так. Вы получаете один небольшой временный объект (a List
С asList
), но это обеспечивает представление массива. Вместо копирования операции чтения и записи переходят к исходному массиву.
можно расширить Vector
рейтинг protected
поля. Это дало бы относительно простой способ иметь Vector
станьте видом массива, как Arrays.asList
делает. Альтернативно, как раз копирование данных в поля. Для Java ME это примерно так же хорошо, как и без написания очевидного цикла. Непроверенный код:
return new Vector(0) {{
this.elementData = (Object[])elements.clone();
this.elementCount = this.elementData.length;
}};
конечно, вы, вероятно, лучше с List
чем Vector
. 1.4 срок службы истек. Даже 1.5 завершил большую часть своего периода EOSL.
в J2ME вы застряли, повторяя массив и добавляя элементы один за другим.
Vector v = new Vector();
for (int i = 0; i < this.elements.length; i++) {
v.add(this.elements[i]);
}
упрощенная компаратор, который делает в основном то же самое.
final static class ContactsListComparatorByFirstName implements Comparator {
public int compare(Object o1, Object o2) {
// Sticky Entries Implementation
ContactsListObject clo2 = (ContactsListObject) o2;
ContactsListObject clo1 = (ContactsListObject) o1;
if (clo2.getSticky()) return 1;
if (clo1.getSticky()) return -1;
return clo1.get_contactFirstName().compareTo(clo2.get_contactFirstName());
}
}
использование генериков и ?: это было бы просто
static final class ContactsListComparatorByFirstName implements Comparator<ContactsListObject> {
public int compare(ContactsListObject clo1, ContactsListObject clo2) {
return clo2.getSticky() ? 1 : // Sticky Entries Implementation
clo1.getSticky() ? -1 :
clo1.get_contactFirstName().compareTo(clo2.get_contactFirstName());
}
}
но чтобы ответить на ваш вопрос... (о, Я вижу, у Тома есть то, что я бы уже поставил)
imho ваш единственный жизнеспособный вариант:
public Vector getListElements()
Vector vector = new Vector(this.elements.length);
for (int i = 0; i < this.elements.length; i++) {
vector.add(this.elements[i]);
}
return vector;
}
скопируйте элементы массива в
Vector
илииспользовать
Arrays.asList(...)
возвратитьList
не совсемVector
, но вы должны кодироватьList
интерфейс в любом случае.
достаточно лаконичный способ сделать это, что-то вроде:
Object[] xx = { 1, "cat", new Point(100,200) };
Vector vv = new Vector(Arrays.asList(xx));
System.out.println("vv=="+vv.toString());
но вы все это уже знали, я думаю.