1,张三,28
2,李四,35
3,张三,28
4,王五,35
5,张三,28
6,李四,35
7,赵六,28
8,田七,35
程序代码如下:


1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStream; 4 import java.io.InputStreamReader; 5 import java.util.Comparator; 6 import java.util.HashMap; 7 import java.util.Iterator; 8 import java.util.Map; 9 import java.util.TreeSet; 10 11 12 public class GetNameTest { 13 14 /** 15 * @param args 16 */ 17 public static void main(String[] args) { 18 // TODO Auto-generated method stub 19 //InputStream ips = GetNameTest.class.getResourceAsStream("/com/huawei/interview/info.txt"); 20 //用上一行注释的代码和下一行的代码都可以,因为info.txt与GetNameTest类在同一包下面,所以,可以用下面的相对路径形式 21 22 Map results = new HashMap(); 23 InputStream ips = GetNameTest.class.getResourceAsStream("info.txt"); 24 BufferedReader in = new BufferedReader(new InputStreamReader(ips)); 25 String line = null; 26 try { 27 while((line=in.readLine())!=null) 28 { 29 dealLine(line,results); 30 } 31 sortResults(results); 32 } catch (IOException e) { 33 // TODO Auto-generated catch block 34 e.printStackTrace(); 35 } 36 } 37 38 static class User 39 { 40 public String name; 41 public Integer value; 42 public User(String name,Integer value) 43 { 44 this.name = name; 45 this.value = value; 46 } 47 48 @Override 49 public boolean equals(Object obj) { 50 // TODO Auto-generated method stub 51 52 //下面的代码没有执行,说明往treeset中增加数据时,不会使用到equals方法。 53 boolean result = super.equals(obj); 54 System.out.println(result); 55 return result; 56 } 57 } 58 59 private static void sortResults(Map results) { 60 // TODO Auto-generated method stub 61 TreeSet sortedResults = new TreeSet( 62 new Comparator(){ 63 public int compare(Object o1, Object o2) { 64 // TODO Auto-generated method stub 65 User user1 = (User)o1; 66 User user2 = (User)o2; 67 /*如果compareTo返回结果0,则认为两个对象相等,新的对象不会增加到集合中去 68 * 所以,不能直接用下面的代码,否则,那些个数相同的其他姓名就打印不出来。 69 * */ 70 71 //return user1.value-user2.value; 72 //return user1.value<user2.value?-1:user1.value==user2.value?0:1; 73 if(user1.value<user2.value) 74 { 75 return -1; 76 }else if(user1.value>user2.value) 77 { 78 return 1; 79 }else 80 { 81 return user1.name.compareTo(user2.name); 82 } 83 } 84 85 } 86 ); 87 Iterator iterator = results.keySet().iterator(); 88 while(iterator.hasNext()) 89 { 90 String name = (String)iterator.next(); 91 Integer value = (Integer)results.get(name); 92 if(value > 1) 93 { 94 sortedResults.add(new User(name,value)); 95 } 96 } 97 98 printResults(sortedResults); 99 } 100 private static void printResults(TreeSet sortedResults) 101 { 102 Iterator iterator = sortedResults.iterator(); 103 while(iterator.hasNext()) 104 { 105 User user = (User)iterator.next(); 106 System.out.println(user.name + ":" + user.value); 107 } 108 } 109 public static void dealLine(String line,Map map) 110 { 111 if(!"".equals(line.trim())) 112 { 113 String [] results = line.split(","); 114 if(results.length == 3) 115 { 116 String name = results[1]; 117 Integer value = (Integer)map.get(name); 118 if(value == null) value = 0; 119 map.put(name,value + 1); 120 } 121 } 122 } 123 124 }