设置List的第一个元素

时间:2015-02-17 11:29:57

标签: java list arraylist

我有以下列表:

private String[] myArray = new String[]{"A","B","C"} ;
List myList = new ArrayList();
for (int i = 0; i < myArray.length; i++) {
            myList.add(myArray[i]);
}

有一个方法可以返回myList的元素

String returnValue=myMethod(); 

returnValue可以是 A或B或C

returnValue应该是List

的第一个元素
myList.add(0, returnValue);

问题是,如果 returnValue =&#34; B&#34; ,myList变为 {&#34; B&#34;,&#34; B&#34;,&# 34; C&#34;}

我可以明确删除 returnValue 并再次将其添加到myList。但它似乎相当多余,任何人都可以提出更好的设计方法。

我的要求结果是 {&#34; B&#34;,&#34; A&#34;,&#34; C&#34;}

3 个答案:

答案 0 :(得分:4)

据我所知,您希望returnValue成为List的第一个元素,即更改顺序。 这可以通过使用:

来实现
Collections.swap(myList, 0, myList.indexOf(returnValue));

由于这不使用添加或删除,因此可以简化整个代码:

List<String> myList = Arrays.asList("A","B","C");
String returnValue=myMethod();
Collections.swap(myList, 0, myList.indexOf(returnValue));

请注意,这会更改其余元素的顺序。如果您想保留所有元素的顺序,但移动到列表前面的元素(如remove后面跟add那样),则需要使用rotate

List<String> myList = Arrays.asList("A","B","C");
String returnValue=myMethod();
Collections.rotate(myList.subList(0, myList.indexOf(returnValue)+1), 1);

但在大型列表中使用swap会更快,因此如果您不需要其余元素来保留原始订单,建议使用swap

答案 1 :(得分:1)

List.add(index, element)不会替换List中的第一个元素,它会插入并因此移动以下所有元素。您最终会在列表中输入4个条目:

{RETURNVALUE, "A","B","C"}

还有一个替换变体:List.set(index, element)。有了这个,你可以在列表中输入3个条目:

{RETURNVALUE,"B","C"}

如果你想让你的List全部排序,那就是简单的实用方法

Collections.sort(mylist);

根据元素的compareTo()方法对您的集合进行排序,在您的情况下,这将是一个简单的String排序。
如果你的RETURNVALUE是B并且你已经插入了元素,那么你最终会得到

{"A","B","B","C"} 

答案 2 :(得分:0)

如果我很好理解您的问题,您应该使用set(int index, E element)方法替换列表中的给定元素