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;
}

  1. скопируйте элементы массива в Vector или

  2. использовать 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());

но вы все это уже знали, я думаю.