рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рд╣реИрдВ (рдмрд╛рдЗрдЯ, рд╢реЙрд░реНрдЯ, рдЗрдВрдЯ, рд▓реЙрдиреНрдЧ, рдлреНрд▓реЛрдЯ, рдбрдмрд▓) рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд░реИрдкрд░ рдЙрдирдХреЗ рдКрдкрд░ (рдмрд╛рдЗрдЯ, рд╢реЙрд░реНрдЯ, рдЗрдВрдЯреЗрдЧрд░, рд▓реЙрдиреНрдЧ, рдлреНрд▓реЛрдЯ, рдбрдмрд▓)ред рд╡рд┐рднрд┐рдиреНрди рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВред рдПрдХ рдУрд░, рдСрдмреНрдЬреЗрдХреНрдЯ рд░реИрдкрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ: рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдирдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рд╕рдВрдХреБрдЪрд┐рдд рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рд╕реБрдВрджрд░ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдмреЙрдХреНрд╕рд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдореГрддрд┐ рдХреЛ рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рддреЗрдЬ рдФрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЙрди рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪрд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдореВрд░реНрдд рд╢реВрдиреНрдп рдкрд░ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдирдВрдмрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдк рдЬреИрд╕реЗ рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдореЗрдореЛрд░реА рдХреЛ рдиреБрдХрд╕рд╛рди рдЙрдард╛рдирд╛ рдкрдбрд╝реЗрдЧрд╛, рдпрд╛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкрд░рд╕реНрдкрд░ рд╕рдВрдЦреНрдпрд╛ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧреАред
рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХрд╣реАрдВ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рднрд┐рдиреНрди рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдХреНрд╕рд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:
public Map<String, Integer> countStrings() { Map<String, Integer> counts = new HashMap<String, Integer>(); while(true) { String next = getNextString(); if(next == null) break; Integer val = counts.get(next); if(val == null) counts.put(next, 1); else counts.put(next, val+1); } return counts; }
рдпрджрд┐ рдмрд╣реБрдд рд╕рд╛рд░реА рдкреНрд░рдХрд╛рд░ рдХреА рд▓рд╛рдЗрдиреЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рдмреЙрдХреНрд╕рд┐рдВрдЧ рд╕реЗ рд▓рд╛рдЦреЛрдВ рдЕрд╕реНрдерд╛рдпреА рдЗрдВрдЯреЗрдЧрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдиреЗрдВрдЧреЗ, рдЬреЛ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдлрд┐рд░ рд╕рд╛рдл рдХрд░реЗрдЧрд╛ред рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдбрд░рд╛рд╡рдирд╛ рд╣реИред рдирд╣реАрдВ, рдпрд╣ рднрдпрд╛рд╡рд╣ рд░реВрдк рд╕реЗ рдзреАрдорд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА 2-3 рдмрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЧрддрд┐ рджреЗрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо MutableInteger рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдРрд╕реА рдХрдХреНрд╖рд╛ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
org.apache.commons.lang рдореЗрдВ ), рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
public class MutableInteger { private int value; public MutableInteger(int value) { this.value = value; } public int intValue() { return value; } public void set(int value) { this.value = value; } public void increment() { value++; } public String toString() { return String.valueOf(value); } }
рдЕрдЧрд▓рд╛, рдЖрдк рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рддрд░реАрдХреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд░рд┐рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рддреБрд▓рдирд╛рддреНрдордХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдФрд░ рдмрд░рд╛рдмрд░ рдФрд░ рд╣реИрд╢рдХреЛрдб (рд╣реИрд╢рдХреЛрдб рдореЗрдВ, рдЖрдк рдмрд╕ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдЬреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЕрдм countStrings () рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
public Map<String, MutableInteger> countStrings() { Map<String, MutableInteger> counts = new HashMap<String, MutableInteger>(); while(true) { String next = getNextString(); if(next == null) break; MutableInteger val = counts.get(next); if(val == null) counts.put(next, new MutableInteger(1)); else val.increment(); } return counts; }
рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдирдХреНрд╢рд╛ <рд╕реНрдЯреНрд░реАрдВрдЧ, рдореНрдпреВрдЯреЗрдмрд▓рдЗрдВрдЯрд░рд░> рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдореЗрдВ java.lang.Number рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рд╣рдо рдореИрдк <рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдирдВрдмрд░> рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рдпрд╛ рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ, рдЧрд┐рдирддреА рдХреЗ рдмрд╛рдж, рд╕рдм рдХреБрдЫ рдПрдХ рдирдП рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рдЗрд╕реА рддрд░рд╣, рдЖрдк рди рдХреЗрд╡рд▓ рдорд╛рддреНрд░рд╛, рдмрд▓реНрдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдкрд░ рдЕрдиреНрдп рдЖрдВрдХрдбрд╝реЗ рднреА рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ java.util.concurrent.atomic.AtomicInteger рднреА рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ MutableInteger рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдЯрдореЙрд╕рд┐рдЯреА рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЛ рднреА рдкрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ MutableInteger рдХреА рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред