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