Java arraylist存在问题arraylist<;int[]>;

Java arraylist存在问题arraylist<;int[]>;,java,Java,这就是我试图回答的问题: 编写一个将稀疏数组作为参数并返回的方法 一个新的等效密集数组。密集数组只需足够大,即可容纳所有值。例如,如果稀疏数组中的最后一个元素位于索引89,则生成的密集数组只需容纳90个值 密集数组:[3,8,4,7,9,0,5,0]该数字是随机生成的。 稀疏数组是数组[[0,3]、[1,8]、[2,4]、[3,7]、[4,9]、[6,5]]的数组列表 因此,在稀疏数组中,如果生成的数字为!0值及其索引存储在大小为2的数组中,但如果生成的数字为0,则不会存储任何内容因此,如果您只

这就是我试图回答的问题: 编写一个将稀疏数组作为参数并返回的方法 一个新的等效密集数组。密集数组只需足够大,即可容纳所有值。例如,如果稀疏数组中的最后一个元素位于索引89,则生成的密集数组只需容纳90个值

密集数组:[3,8,4,7,9,0,5,0]该数字是随机生成的。 稀疏数组是数组[[0,3]、[1,8]、[2,4]、[3,7]、[4,9]、[6,5]]的数组列表
因此,在稀疏数组中,如果生成的数字为!0值及其索引存储在大小为2的数组中,但如果生成的数字为0,则不会存储任何内容

因此,如果您只想存储两个成对的整数,我建议使用哈希映射。在您的情况下,您将使用:

HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

除非你想做一些比仅仅存储2个成对整数更特别的事情,否则我真的建议你这样做

当集合中的元素(作为数组)具有固定大小时。您的解决方案还可以,这是一种快速的方法

但是当您的元素没有固定的大小时,例如:
[[1,2,3],[4,5],[6],[7,8,9,10,11]
,您可以通过元素进行交互:

for(int[] e : sparseArr)
{
    for(int number : e)
    {
        tree.add(number);
    }
}
无论您的
sparseArr
中有多少个元素,也不管您的元素有多长>


要对元素进行排序,我建议您使用
TreeSet
,将元素推入树中会自动排序。

您所使用的方法应该执行以下操作

public int[] sparseToDense (ArrayList<int[]> sparse) {
  int i = 0;
  int[] dense = new int[sparse.get(sparse.size()-1)[0]];
  int[] sp;
  ListIterator<int[]> iter = sparse.listIterator();
  while (iter.hasNext()) {
    sp = iter.next();
    while (sp[0] != i) {
      dense[i++] = 0;
    }
    dense[i++] = sp[1];
  }
  return dense;
}
public int[]sparseToDense(ArrayList sparse){
int i=0;
int[]稠密=新int[sparse.get(sparse.size()-1)[0]];
int[]sp;
ListIterator iter=sparse.ListIterator();
while(iter.hasNext()){
sp=iter.next();
while(sp[0]!=i){
稠密[i++]=0;
}
稠密[i++]=sp[1];
}
回归密集;
}

这是另一种方法,因为您有Java8,所以您将能够使用stream。但是,如果您是初学者,我建议您尝试使用for循环和数组,这对您的学习会更好

     public static ArrayList<Integer> returnDense(ArrayList<int[]> sparse) {
        return sparse.stream().flatMap(p -> IntStream.of(p).boxed())
              .collect(Collectors.toCollection(ArrayList::new));
     } 

.filter(Objects::nonNull)
确保不会有空值,但如果您知道不会有空值,则没有必要这样做

你说的密集是什么意思?展平
arraylist
?@sam2090,否稀疏arraylist是一个数组元素的列表,按其索引位置和值排列,如果元素的值为0,则忽略该元素。密集数组是一个标准数组,其中所有元素都包含它们的值,即使它是0。那么,你解决了吗?我对sp=iter.Next()有一个问题;我不认为我不认为它是listIterator方法的一部分因为sp不是objectnext()应该有一个小写的n已对此进行了编辑并将迭代器对象的类型设置为int[]
     public static ArrayList<Integer> returnDense(ArrayList<int[]> sparse) {
        return sparse.stream().flatMap(p -> IntStream.of(p).boxed())
              .collect(Collectors.toCollection(ArrayList::new));
     } 
public ArrayList<Integer> returnDense(ArrayList<Integer[]> sparse) {
    return sparse.stream().flatMap(p -> Arrays.asList(p).stream()).filter(Objects::nonNull)
        .collect(Collectors.toCollection(ArrayList::new));
    }