如果我有:linkedlist1= 1,2,3,4;
和linkedlist2= 5,6,7;
我是否能够以这种方式将linkedlist2附加到linkedlist1的末尾:linkedlist2.set(0,9999)
它更改为linkedlist2 = [999,6,7]
而linkedlist1
变为[1,2,3,4,9999,7,8];
?
这可能吗?或者我确实需要另一种结构?
以下代码不起作用:
List<Double> l1 = new LinkedList<Double>(Arrays.asList(1.0,2.0));
List<Double> l2 = new LinkedList<Double>(Arrays.asList(3.0,4.0));
l1.addAll(l2);
System.out.println(l1);
l2.set(0, 9.0);
System.out.println(l1);
输出:
[1.0, 2.0, 3.0, 4.0]
[1.0, 2.0, 3.0, 4.0]
答案 0 :(得分:5)
Java提供的标准LinkedList类缺少此功能。
正如Donal Boyle发布的那样,您可以将一个列表的内容添加到另一个列表中,但这并不像您的描述那样保持链接。
答案 1 :(得分:1)
你不能但作为替代方案你可以有一个列表清单,但我不知道这是否可以按你的需要运作:
import java.util.*;
import static java.lang.System.out;
class ListOfLists {
public static void main( String ... args ) {
List<Integer> a = new LinkedList<Integer>(Arrays.asList(1,2,3,4));
List<Integer> b = new LinkedList<Integer>(Arrays.asList(5,6,7));
List<List> list = new LinkedList<List>();
list.add( a );
list.add( b );
out.println("Before : " + list );
b.set( 0, 999 );
out.println("After : " + list );
}
}
Before : [[1, 2, 3, 4], [5, 6, 7]]
After : [[1, 2, 3, 4], [999, 6, 7]]
答案 2 :(得分:0)
要回答有关更新一个列表并查看另一个列表中反映的更新的问题,答案取决于它。
如果更新第一个列表中的对象,您将看到更改。但如果你更换对象,你将看不到变化。在第一个列表上调用.set()将替换列表中的对象。不幸的是,在不替换它的情况下,无法更新基元(或其类表示,在本例中为Float)的值。
要附加两个列表,假设您使用的是java.util.LinkedList,则可以调用addAll
答案 3 :(得分:0)
addAll()
只获取第二个链接列表中的值。对第二个列表中的索引和设置值的更改不会影响第一个。 (注意:对象本身的更改将保留,因为它们都指向同一个对象)。
如果您正在寻找,可以制作列表清单。
答案 4 :(得分:0)
实现此目的的最简单方法是为您的项目设置适当的类,并使此类MyInt
的实例相互链接,而不是依赖于LinkedList,即添加MyInt next;
字段保存整数的自定义类。
然后按照描述链接它们。
然后可以在不触及列表结构的情况下对一个实例进行更改,并在通过next
引用迭代此列表时进行相应反映。
答案 5 :(得分:0)
这个问题似乎是subList(int, int)方法的一个很好的应用程序:
List<Double> l1 = new LinkedList<Double>(Arrays.asList(1.0, 2.0, 3.0, 4.0));
List<Double> l2 = l1.subList(2, 4);
唉,subList的JavaDoc声明:
返回的列表的语义 如果这个方法变得不确定 支持列表(即此列表)是 以其他方式进行结构修改 而不是通过返回的列表。 (结构修改是那些 这会改变这个列表的大小,或者 否则就会以这种方式扰乱它 正在进行的迭代可能会产生 结果不正确。)
因此,如果您想在l1上使用.add
之类的方法,那么您可能会失败。实际上,对于从AbstractList
派生的所有 fail-fast 列表类(例如LinkedList
),subList应该在父列表之后抛出ConcurrentModificationException
subList在结构上进行了修改。
但是,如果您远离父列表中的结构修改(或者如果您在修改后重新创建子列表),那么一切都将按预期工作。