将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;
}
}
}
}
}
答案 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)
将数组元素复制到Vector
或
使用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());
但是我猜你们都已经知道了。