我有以下列表:
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;}
答案 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)
方法替换列表中的给定元素