在List的末尾放置null

时间:2014-06-23 08:58:44

标签: java arraylist

我有一个像对象的arrayList:[object 1,object 2,null,null,..,null,object 3,null,null]

我尝试在对象2之后移动对象3而没有删除" null case",但它不起作用。所以我想从右到左迭代我的arrayList,检查该值是否为null,然后将对象3移到对象2后面。我确切地知道" null case&#34的数量;在对象2和对象3之间

我试着写下这个:

ArrayList<Type> subList = new ArrayList<Type>();

for (int i = 0; i < array.size(); i++) {
    subList = array.get(i);
    for (int j = subList.size(); j >=0 ; j--) {
        if(subList.get(j)!=null) {
            Collections.swap(subList, j, j-1);
        }                       
    }
}

编辑:

解决方案1:适用于我的项目

for(int i=0;i<subList.size();i++)
    if(subList.get(i)!=null) {
        for(int j=0;j<i;j++) {
            if (subList.get(j)==null) {
                Collections.swap(subList,i,j);
                break;
            }
        }
    }
}

解决方案2:复制其他arraylist 对我的项目不起作用,不知道为什么

List<String> strings = Arrays.asList(new String[]{"A", null, "B"});
List<String> result = new ArrayList<String>();

for(String string : strings) {
    if(string != null)
        result.add(string);         
}

for (int i = 0, remaining = strings.size() - result.size(); i < remaining; i++) {
    result.add(null);
}

2 个答案:

答案 0 :(得分:0)

更新2:

要在没有创建任何新列表的情况下在对象之间交换,请使用Collections.swap();像这样:

public static void main(String[] args) {

    ArrayList subList = new ArrayList();
    subList.add("1");
    subList.add("2");
    subList.add(null);
    subList.add(null);
    subList.add("3");

    for(int i=0;i<subList.size();i++)
        if(subList.get(i)!=null) {
            for(int j=0;j<i;j++) {
                if (subList.get(j)==null) {
                    Collections.swap(subList,i,j);
                    break;
                }
            }
        }
    }
}

更新1:

试试这个:

public static void main(String[] args) {
    ArrayList subList = new ArrayList();
    subList.add("1");
    subList.add("2");
    subList.add(null);
    subList.add(null);
    subList.add("3");
    subList=leftShift(subList);
}

public static ArrayList leftShift(ArrayList x){
    ArrayList temp=new ArrayList();
    int count=0;
    for(Object t:x){
        if(t!=null)
            temp.add(t);
        else
            count++;
    }
    for (int i=0;i<count;i++)
        temp.add(null);
    return temp;
}

答案 1 :(得分:0)

从我的头顶解决方案,并不精彩,但它会让你保持秩序

int nullIndex = -1;
for (int i = 0; i < list.size(); i++) {
    if (nullIndex==-1 && list.get(i) == null) {
        System.out.println("nullIndex ="+i);
        nullIndex = i;
    } else if (nullIndex >= 0 && list.get(i) != null) {
        System.out.println("swap ="+i+" "+nullIndex);

        list.set(nullIndex, list.get(i));
        list.set(i, null);
        i = nullIndex;
        nullIndex=-1;
    }
}
抱歉,我忘了你正在使用arraylist,你可以做到这一点更简单

int counter=0;
while(subList.contains(null)){
    subList.remove(null);
    counter++;
};
while(counter>0){
    subList.add(null);
    counter--;
}