我试图从给定的ArrayLists中获取字符串的所有重复。我通过使用以下代码实现了这一点:
public static void howmany (ArrayList <String> list)
{
for (int i=0; i<list.size();i++)
{
System.out.println(list.get(i)+ ": " + Collections.frequency(list, list.get(i)));
}
}
但是,输出如下:
抱歉:4棒球:1对不起:4对不起:4对不起:4火车:2火车:2泰迪:2 泰迪:2球:2球:2
Runner类中的代码是:
ArrayList<String> toys = new ArrayList <String>();
String[] toys1 = {"sorry", "bat", "sorry", "sorry", "sorry", "train", "train", "teddy", "teddy", "ball", "ball"};
for (int i=0; i<toys1.length;i++)
{
toys.add(toys1[i]);
}
Toys.howmany(toys);
有没有一种方法输出不重复这些词? 例如,它只是说:
抱歉:4,蝙蝠:1,火车:2,泰迪:2,球:2
我是初学者,我还在努力学习java逻辑!
答案 0 :(得分:3)
您可以存储已打印的值,然后在每次打印值时进行检查,以便消除重复。
例如,你可以这样做:
public static void howmany (ArrayList <String> list)
{
Set<String> processed = new HashSet<>();
for (int i=0; i<list.size();i++)
{
if(!processed.contains(list.get(i))) {
System.out.println(list.get(i) + ": " + Collections.frequency(list, list.get(i)));
processed.add(list.get(i));
}
}
}
答案 1 :(得分:1)
为此目的使用HashMap
。首先,遍历整个ArrayList
并将这些字符串添加为键,如果找到新字符串或增加相应键的值,则将其值设为1
。
if(myMap.contains("foo"))
myMap.put("foo",myMap.get("foo")++);
else
myMap.put("foo",1);
我希望这可能有所帮助。
答案 2 :(得分:0)
我可以给你2个简单的方法。
您可以使用一套来检查重复项。创建一个hashset并将list.get(i)添加到它使用if条件中的返回值。只有在set中没有添加hashset的add方法才会返回true,否则它将返回false。
或者,您可以从列表中创建一个哈希集,并遍历您的哈希集以消除任何重复项。
快乐的节目!
答案 3 :(得分:0)
只需使用hashmap,就像这样
String[] toys1 = {"sorry", "bat", "sorry", "sorry", "sorry", "train", "train", "teddy", "teddy", "ball", "ball"};
Map<String,Integer> toyMap = new HashMap<String,Integer>();
for(String str:toys1){
if(toyMap.containsKey(str)){
toyMap.put(str, toyMap.get(str)+1);
}else{
toyMap.put(str, 1);
}
}
for (Map.Entry<String, Integer> entry : toyMap.entrySet()) {
System.out.println(entry.getKey()+" : "+entry.getValue());
}
答案 4 :(得分:0)
这是使用hashmap的O(n)解决方案:
public static void howmany (List <String> list)
{
Map<String,Integer> counts = new HashMap<>();
for (String item:list)
{
counts.put(item, counts.getOrDefault(item,0)+1);
}
System.out.println(counts);
}
public static void main(String []args){
String[] toys1 = {"sorry", "bat", "sorry", "sorry", "sorry", "train", "train", "teddy", "teddy", "ball", "ball"};
howmany(Arrays.<String>asList(toys1));
}