例如,如果我想保留首先出现的字符串的顺序,但我还希望第二次出现的副本在输出列表中的第一个后面出现。例如,如果我添加: arrlist.add( “鲍勃”); arrlist.add( “PAT”); arrlist.add( “棕褐色”); arrlist.add( “鲍勃”); arrlist.add( “垫”); arrlist.add( “猫”); arrlist.add( “狗”); arrlist.add( “猫”);
我希望输出为
String = bob
String = bob
String = pat
String = tan
String = mat
String = cat
String = cat
String = dog
这是我的代码:
package com.tutorialspoint;
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
// create an empty array list with an initial capacity
ArrayList<String> arrlist = new ArrayList<String>();
// use add() method to add elements in the list
arrlist.add("bob");
arrlist.add("pat");
arrlist.add("tan");
arrlist.add("bob");
arrlist.add("mat");
arrlist.add("cat");
arrlist.add("dog");
arrlist.add("cat");
// let us print all the elements available in list
for (String number : arrlist) {
System.out.println("String = " + number);
}
// retrieves element at 4th postion
String retval=arrlist.get(3);
System.out.println("Retrieved element is = " + retval);
}
}
答案 0 :(得分:2)
您可以使用indexOf(yourString)获取列表中值的索引。您可以使用它来检查条目是否存在,并在该条目之后插入值。 有关详细信息,请参阅javadocs。
的内容
if(arrlist.indexOf(myString) == -1) // Not found
arrlist.add(myString)
else
arrlist.add(arrlist.indexOf(myString), myString)
那么我做到了,给你写了代码......对我感到羞耻。
答案 1 :(得分:2)
这不是真正“保留”,因为从原始意义上讲,你确实输入了bob
第一和第四,而不是第一和 second 。
我没有知道可以实现此目的的原生数据集,但是,您可以使用LinkedHashMap
(保留第一次输入密钥的顺序)来实现此目的,其中值是计数该项目的添加次数:
add
方法,从哈希映射中获取值或默认为0.递增它。再次将它放在哈希映射上。示例强>
public static class ReorderingList {
private LinkedHashMap<String, Integer> items =
new LinkedHashMap<String, Integer>();
public void add(String item) {
Integer value = items.get(item);
if (value == null) value = 0;
value++;
items.put(item, value);
}
public List<String> asList() {
List<String> result = new ArrayList<String>();
for(Map.Entry<String, Integer> entry : items.entrySet()) {
for (int i=0; i < entry.getValue(); i++) {
result.add(entry.getKey());
}
}
return result;
}
}
<强>测试强>
public static void main(String[] args) {
ReorderingList rlist = new ReorderingList();
rlist.add("bob");
rlist.add("pat");
rlist.add("tan");
rlist.add("bob");
rlist.add("mat");
rlist.add("cat");
rlist.add("dog");
rlist.add("cat");
List<String> arrlist = rlist.asList();
// let us print all the elements available in list
for (String number : arrlist) {
System.out.println("String = " + number);
}
// retrieves element at 4th postion
String retval=arrlist.get(3);
System.out.println("Retrieved element is = " + retval);
}
测试输出:
String = bob
String = bob
String = pat
String = tan
String = mat
String = cat
String = cat
String = dog
Retrieved element is = tan
答案 2 :(得分:0)
如果您希望项目按排序顺序排列(按字母顺序排列),请查看priority queue。
每次添加项目时,都会根据比较器添加项目。比较器决定排序(按字母顺序,按长度,无论如何)。
然后,当您从队列正面打印和删除项目时,您的项目将按顺序打印出来。
答案 3 :(得分:0)
如果您可以使用Guava,您可以考虑使用LinkedHashMultiset,这将直接解决您的问题,而无需将其调整为例如NickC提出的LinkedHashMap。
答案 4 :(得分:0)
只需使用Collections.sort(myArrayList);
即可。您正在使用ArrayList
String
,因此如果您想使用其他类型的对象,则必须在对象内部实施compare()
方法才能使用Collections.sort()
1}}。
请查看Object Ordering以获得更好的解释。