设置列表的第一个元素

set first element of a List

我有以下列表:

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

有一种方法 returns myList 的一个元素

String returnValue=myMethod(); 

returnValue 可以是 A 或 B 或 C

returnValue 应该是列表的第一个元素

myList.add(0, returnValue);

问题是如果 returnValue="B" ,myList 变为 {"B","B","C"}.

我可以明确删除 returnValue 并将其再次添加到 myList。但这似乎有点多余,谁能提出更好的设计方法。

我需要的结果是 {"B","A","C"}

据我了解,您希望 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

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

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

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

还有一个替换变体:List.set(index, element)。这样,您将在列表中以 3 个条目结束 uo:

{RETURNVALUE,"B","C"}

如果你想让你的 List 井井有条,可以使用简单的实用方法

Collections.sort(mylist);

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

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