我有这个方法从列表中删除元素
List<LinkedList<Object>> list = new LinkedList<>();
删除两个元素,返回一个列表然后通过队列 名称= queue.removePair();
public List removePair() {
List<E> nList = new LinkedList<>();
if (list.isEmpty() == true) {
throw new InsufficientElementsException();
}
if (list.isEmpty() == false) {
Object temp;
for (int i = 0; i < list.size(); i++) {
temp = list.get(i).size();
if (temp.equals(2)) {
nList.add((E) list.get(i));
list.remove(i);
}
}
return nList;
}
return nList;
}
我相信这不起作用,因为当我返回Nlist时,它只返回第一行中声明的那个?我该如何解决这个问题?
答案 0 :(得分:1)
您同时使用列表中的remove
和get
元素。在remove
之后,您的索引将出错。请在for循环中使用Iterator
:
for (Iterator<List<Object>> iterator = list.iterator(); iterator.hasNext();) {
List<Object> l = iterator.next();
if (l.size() == 2) {
nList.add((E) l);
iterator.remove();
}
}
答案 1 :(得分:0)
您的以下代码:
if (temp.equals(2))
始终返回false。这就是为什么你总是得到空名单。
答案 2 :(得分:0)
我编写的代码可以解决您的问题。试一试。评论中提到了变化。
// Used a generic class
public class TestClass<T> where T:LinkedList<Object>
{
public List<T> list = new List<T>();
public List<T> TestMethod()
{
List<T> nList = new List<T>();
// Removed IsEmpty , used Count instead
if (list.Count == 0) {
//throw new InsufficientElementsException();
}
if (list.Count > 0) {
int temp;
for (int i = 0; i < list.Count; i++)
{
// To find out the count of nodes in a particular item of the list
temp = list.ElementAt(i).Count;
T obj = list.ElementAt(i);
if (temp == 2)
{
nList.Add(obj);
list.RemoveAt(i);
}
}
return nList;
}
return nList;
}
}