2016-09-18 76 views
0

我想从给定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

在转轮类的代码是:

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逻辑!

回答

3

您可以存储已打印的值,然后每次打印值时检查一次,以便消除重复项。使用HashMap的

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)); 
     } 
    } 
} 
0

我可以给你2个简单的方法。

您可以使用一组来检查重复项。创建一个哈希集并添加list.get(i),以便在if条件中使用返回值。哈希集的添加方法只有在集合中尚未添加时才会重新生成,否则它将返回false。

或者,您可以从列表中创建一个哈希集,并遍历您的哈希集以消除任何重复项。

快乐编程!

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()); 
} 
0

这里是一个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)); 
    } 
1

使用

例如,你可以这样做HashMap为此目的。首先,遍历整个ArrayList并添加这些字符串作为关键字,如果发现新字符串或增加相应关键字的值,则将它们的值设置为1

if(myMap.contains("foo")) 
    myMap.put("foo",myMap.get("foo")++); 
else 
    myMap.put("foo",1); 

我希望这可能会有所帮助。