Java将Object 数组转换为Vector

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

JDE <1.5

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

this.elements是一个Object []

谢谢,rAyt

我应该澄清我的问题

我的目标平台是黑莓。

不支持集合。 Array.asList()不是:/

全class

 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; } else { return 0; } } } } } 

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

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

可以扩展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()); } } 

使用generics和?:它只是

 static final class ContactsListComparatorByFirstName implements Comparator { 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()); 

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