Я немного изменил ваш метод add () и метод toString ():
public void add(E value) {
if (first == null) {
first = new Node(value, null, null);
} else {
Node current = first;
while (current.next != null) {
current = current.next;
}
current.next = new Node(value, null, current);
}
size++;
}
public String toString()
{
if (first == null)
{
return "[]";
}
else
{
String result = "[" + first.data;
Node current = first.next;
while (current != null)
{
result += ", " +current.data ;
current = current.next;
}
result += "]";
return result;
}
}
И вот главное для проверки:
public static void main(String[] args) {
DoublyLinkedList<Integer> list = new DoublyLinkedList<>();
list.add(1);
list.add(2);
list.add(3);
System.out.println(list.toString()); // [1, 2, 3]
}
Я так не думаю. В IL нет никаких инструкций как подкачка, которая позволила бы Вам делать то, что Вы хотите. Почему Вы рассматриваете использование локального как нежелательное? Если JIT-компилятор будет достаточно хорош, то это не приведет ни к какому более медленному машинному коду, чем использование гипотетической операции подкачки в IL.
+1 для ответа kvbs, см.: http://www.codeproject.com/KB/msil/msilenhancement.aspx
Встроенный с тем, какой сказанный kvb, Вы могли попробовать небольшую функцию, чтобы сделать некоторое переупорядочение. Не уверенный, если это было бы немного быстрее.
Я столкнулся с той же проблемой. Я хотел создать довольно большой метод и часто хотел «поменять местами», чтобы сохранить вычисленное значение. Я был недоволен большим количеством местных жителей, появляющихся в ildasm, и заметил, что BeginScope / EndScope не помогли. В итоге я создал локальный «своп» для контекста моего метода и повторно использовал его для каждой операции обмена. Это делает сгенерированный IL чище; не уверен, оказывает ли это какое-либо существенное влияние на производительность.