2014-09-05 16 views
1

我有下面的代码,我想知道这是否是返回数组的正确方法。 我的函数返回Page<byte[]>[](一个数组Page<byte[]>),我使用ArrayList作为容器。如何在Java中使用带有泛型类型的ArrayList.toArray()函数

页面是私有HashMap成员。 页面是一个对象,我创建了到底有一个泛型类型T.

的成员,我回我的ArrayList铸成指定者,但我不能只告诉它丢给页数组对象,它需要一个固定的大小(新的页面[pageArray.size()]),我认为这不是正确的做法。

什么是正确的方法?

public Page<byte[]>[] getPages(Integer[] pageIds){ 
    ArrayList<Page<byte[]>> pageArray = new ArrayList<Page<byte[]>>(); 
    for (int pageId : pageIds){ 
     if (pages.containsKey(pageId)){ 
      pageArray.add(pages.get(pageId)); 
     } 
    } 
    return pageArray.toArray(new Page[pageArray.size()]); 
    //return pageArray.toArray(Page); 
+1

为什么你觉得这是不是“正确”的方式? – 2014-09-05 08:42:03

+0

如果你必须对它们进行这样的操作,你为什么要用数组而不是列表? – Narmer 2014-09-05 09:13:48

回答

0

这应该工作:

@SuppressWarnings("unchecked") 
    public Page<byte[]>[] getPages(Integer[] pageIds) { 

     final ArrayList<Page<byte[]>> pageArray = new ArrayList<Page<byte[]>>(); 

     for (int pageId : pageIds) { 
     if (pages.containsKey(pageId)) { 
      pageArray.add(pages.get(pageId)); 
     } 
     } 

     return pageArray.toArray(new Page[pageArray.size()]); 
    } 
-1

我会建议用一个空参数,因为这样的话你没有创建任何大的临时对象:

return pageArray.toArray(new Page[0]); 

大小由以下因素决定无论如何,pageArray的大小。

+0

无论如何,“大型”阵列需要装箱,您的解决方案只能制作1个物品。如果'toArray()'接收到足够大的数组,则会将结果存储在该数组中*,否则*将创建一个新数组。 [javadoc的](http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#toArray(T [])) – kajacx 2014-09-05 09:04:58

1

我不明白为什么你使用数组而不是列表如果你必须对它们执行这样的操作。

无论如何,你的方法是正确的,并做的工作。不使用ArrayList另一种方法可以是这样:

public Page<byte[]>[] getPages(Integer[] pageIds){ 
    int count = 0; 
    for (int i=0; i<pageIds.length;i++){ 
     if (pages.containsKey(pageIds[i])){ 
      count++; 
      pageIds[i] = -1; //BEWARE! this modifies the original pageIds array! 
     } 
    } 
    int retCount = 0; 
    Page<byte[]>[] ret = new Page<byte[]>[count]; 
    for (int i=0; i<pageIds.length;i++){ 
     if(pageIds[i]!=-1){ 
      ret[retCount] = pages.get(pageIds[i]); 
      retCount++; 
     } 
    } 
    return ret; 
} 

但它真的不添加任何东西到你的方法...

相关问题