2015-11-02 47 views

回答

0

好了,以最快的方式可能会创建一个由boths整数和数组让你通过平等

+1

如果你添加一些解释你的答案的代码,这将会非常有帮助。 – Dev

3

两个INT(整数包装)和数组的公共基类使用boths组成的附配的对象是Object 。因此使用Object类型创建ArrayList

ArrayList<Object> list= new ArrayList<Object>(); 

但这不正确的做法解决这个问题并没有使用泛型这里,使运行时的安全性。因此,重新设计您的程序并将每种类型分配到单独的列表中或使用任何其他适当的类型。

0

使用一个具有int和一个数组作为其实例变量的类。然后创建一个ArrayList

import java.util.ArrayList; 

public class Hello { 
    public static void main(String[]args) { 
     ArrayList<Intarray> myArrayList = new ArrayList<Intarray>(); 

     int[] arr = {3,4,5}; 

     myArrayList.add(new Intarray(2,arr)); 
    } 
} 

class Intarray { 
    private int numbers; 
    private int[] myArray; 

    public Intarray(int numbers, int[] myArray){ 
     this.numbers = numbers; 
     this.myArray = myArray; 
    } 
} 
+1

尽管这是实现预期结果的好方法;这需要一个整数和一个数组,我相信海报要么或...不是两个。 –

0

在你的列表需要的所有对象泛化水平创建数组列表。在这种情况下,即int和array,它是java.lang.Object。

这里的一个小的测试我跑:

public static void main(String[] args) { 
    List<Object> both = new ArrayList<Object>(); 
    both.add(1); 
    both.add(args); 
    System.out.println(both); 
} 

产地: [1,[Ljava.lang.String; @ 1db9742]

0

作为@AbtPst建议的,最合适的解决办法是将有一个列表清单。这可以通过许多不同的方式完成。就个人而言,我会创建一个具有两个构造函数的类。

class NumericElement 
{ 
    private ArrayList<int> elements; 

    public NumericElement(int newElement) 
    { 
     elements = new ArrayList<int>(); 
     elements.add(newElement); 
    } 

    public NumericElement(ArrayList<int> newElements) 
    { 
     elements = new ArrayList<int>(newElements); // copying array elements to the new array. 
    } 

    public ArrayList<int> getElements() 
    { 
     return elements; 
    } 
} 
0

可以定义一个List类与类型安全接口,隐藏不安全List<Object>作为内部实现细节。

这是比直接使用List<Object>更多的工作。如果您的列表仅由一个类使用,则只需使用List<Object>作为该类的实现细节。 但是,如果您的列表暴露于不止一个类的访问,请考虑使用这种类型安全的方法。

首先,定义一个接口,它可以表示int或int数组。

public interface IScalarOrArrayInt { } 

,并定义为每一个可能的元素类型的子接口:

public interface IScalarInt extends IScalarOrArrayInt { 
    public int getScalarInt(); 
} 

public interface IArrayInt extends IScalarOrArrayInt { 
    public int[] getIntArray(); 
} 

然后定义列表类和它的代表性。它的界面可以是List<IScalarOrArrayInt>该表示可以是List<Object>,因此您可以直接将Integer和int []对象放入其中,而无需包装对象。

public class ListOfScalarsAndArray extends AbstractList<IScalarOrArrayInt> { 
    private static List<Object> m_list = new ArrayList<Object>(); 

由于AbstractList文档中提到的,你要定义一些方法来允许修改您的列表。您可以将它们委托给内部列表,但是包装返回值。

@Override 
public void add(int index, IScalarOrArrayInt element) { 
    m_list.add(index, element); 
} 

@Override 
public IScalarOrArrayInt remove(int index) { 
    return wrap(m_list.remove(index)); 
} 

@Override 
public IScalarOrArrayInt set(int index, IScalarOrArrayInt element) { 
    return wrap(m_list.set(index, element)); 
} 

呼叫者的方便,你可以添加一些方法接受展开的intint[]。例如:

public void add(int element) { 
    m_list.add(element); 
} 

public void add(int[] element) { 
    m_list.add(element); 
} 

要满足标准列表<>接口,可以包装返回值。你的班级控制着内部列表,所以它只能控制列表成员的可能类型。

private IScalarOrArrayInt wrap(Object o) { 
    if (o instanceof Integer) { 
     final int i = (Integer) o; 
     return new IScalarInt() { 

      @Override 
      public int getScalarInt() { 
       return i; 
      } 
     }; 
    } 
    else { 
     assert(o instanceof int[]); 

     final int[] a = (int[]) o; 

     return new IArrayInt() { 
      @Override 
      public int[] getIntArray() { 
       return a; 
      } 
     }; 
    } 
} 
相关问题