2016-09-18 2 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

주자 클래스의 코드는 다음과 같습니다

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

내가 초보자 그리고 난 여전히 노력하고 있어요 자바 논리를 배우십시오!

답변

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

2 가지 간단한 방법을 제공 할 수 있습니다.

세트를 사용하여 중복을 확인할 수 있습니다. 해시 셋을 만들고 list.get (i)에 if 조건의 반환 값을 사용합니다. 해시 세트의 add 메소드는, 세트 내에 아직 추가되어 있지 않은 경우에만 true를 돌려 주어, 그렇지 않은 경우는 false를 돌려줍니다.

또는 목록에서 해시 세트를 만들고 해시 세트를 반복하여 중복을 제거 할 수 있습니다.

해피 프로그래밍!

0

그냥 여기이

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

이 정보가 도움이되기를 바랍니다.