Java将Object []数组转换为Vector

时间:2009-07-12 18:43:14

标签: java arrays java-me vector

将Object数组转换为Vector的最佳方法是什么?

JDE< 1.5

public Vector getListElements()
{
  Vector myVector = this.elements;
  return myVector;
}

this.elements是一个Object []

谢谢, rAyt

我应该澄清我的问题

我的目标平台是黑莓。

不支持收藏。 Array.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 个答案:

答案 0 :(得分:35)

return new Vector(Arrays.asList(elements));

现在,它看起来好像是在复制数据两次,但事实并非如此。你确实得到一个小的临时对象(来自List的{​​{1}}),但这提供了一个数组视图。读取和写入操作不是复制它,而是进入原始数组。

可以扩展asList并戳戳其Vector字段。这将提供一种相对简单的方法,让protected成为数组的视图,如Vector所做的那样。或者,只需将数据复制到字段中即可。对于Java ME来说,如果没有编写明显的循环,这就好了。未经测试的代码:

Arrays.asList

当然,使用return new Vector(0) {{ this.elementData = (Object[])elements.clone(); this.elementCount = this.elementData.length; }}; 而不是List可能会更好。 1.4已完成其服务终止期限。甚至1.5已完成其大部分EOSL期间。

答案 1 :(得分:2)

在J2ME中,你被困在迭代数组并逐个添加元素。

Vector v = new Vector();
for (int i = 0; i < this.elements.length; i++) {
    v.add(this.elements[i]);
}

答案 2 :(得分:1)

  1. 将数组元素复制到Vector

  2. 使用Arrays.asList(...)返回List,这不是Vector,但您仍应编码List接口。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

一个简化的比较器,基本上做同样的事情。

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

但要回答你的问题......(哦,我看到汤姆有我已经提出的问题)

答案 5 :(得分:0)

一种相当简洁的方法就是:

Object[] xx = { 1, "cat", new Point(100,200) };
Vector vv = new Vector(Arrays.asList(xx));
System.out.println("vv=="+vv.toString());

但是我猜你们都已经知道了。