Java 将null置于列表末尾
我有这样一个对象的数组列表:[对象1,对象2,null,null,…,null,对象3,null,null] 我尝试在对象2之后移动对象3,但不删除“null case”,但它不起作用。所以我想从右到左迭代我的arrayList,检查值是否为null,然后将对象3移到对象2后面。我确实不知道对象2和对象3之间的“null case”的数目 我试着这样写:Java 将null置于列表末尾,java,arraylist,Java,Arraylist,我有这样一个对象的数组列表:[对象1,对象2,null,null,…,null,对象3,null,null] 我尝试在对象2之后移动对象3,但不删除“null case”,但它不起作用。所以我想从右到左迭代我的arrayList,检查值是否为null,然后将对象3移到对象2后面。我确实不知道对象2和对象3之间的“null case”的数目 我试着这样写: ArrayList<Type> subList = new ArrayList<Type>(); for (int
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);
}
}
}
ArrayList子列表=新建ArrayList();
对于(int i=0;i=0;j--){
if(subList.get(j)!=null){
集合交换(子列表,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;
}
}
}
}
for(int i=0;i更新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;
}
}
}
}
}
publicstaticvoidmain(字符串[]args){
ArrayList子列表=新的ArrayList();
子列表。添加(“1”);
子列表。添加(“2”);
subList.add(空);
subList.add(空);
子列表。添加(“3”);
因为(inti=0;i我头脑中的解决方案并不聪明,但它能让你们保持秩序
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进行排序呢?事实上,我希望保留所有空的“大小写”,并将它们放在ArrayList的末尾。只需这样做:迭代列表,删除每个空元素(记住删除了多少个),然后在列表末尾重新添加N null。其目的可能是修改给定的列表,而不是创建新的列表。@Marco13检查我的第二次更新。到目前为止,这里建议的解决方案都有O(nlogn)甚至O(N*N)。我刚刚投票,因为这似乎是最简洁有效的解决方案。谢谢!使用此方法的工作:)@用户3748551欢迎您
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;
}
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;
}
}
int counter=0;
while(subList.contains(null)){
subList.remove(null);
counter++;
};
while(counter>0){
subList.add(null);
counter--;
}