2011-04-06 37 views
1

我最近参加了Java面试问题并有以下疑问的,我不知道答案的Java:Java中的面试问题澄清

1>我有以下类

class CricketTeam{    
    String name; //this is the complete name(inclusive of first and last name)   
}    

板球运动员的名字是如下图所示:

1> Sachin Tendulkar
2> Gautam Gambhir
3> Ricky Ponting
4> Shahid Afridi
5> Kevin Pieterson
6> MS Dhoni

我想通过提供了他们last name only .Suugestions /代码名称上的板球队员,排序,将不胜感激。

2>什么是使用enhanced for loop针对 iterator在java.what优点是使用增强对Java循环的优点,为什么却在Java放在第一位推出时iterator可以做的工作?

+0

板球选手是列表还是数组? – pajton 2011-04-06 13:20:20

+0

其你的假设 – Deepak 2011-04-06 13:21:18

回答

10
  1. 实施Comparator其解析最后一个名字的球员的名字和比较这些,然后进行排序的使用比较板球队员集合。
    一个简单的例子(没有错误处理,并假设所有的球员都只有一个名字,没有中间名):

    class CricketTeamComparator implements Comparator<CricketTeam> { 
        @Override 
        public int compare(CricketTeam o1, CricketTeam o2) { 
         String lastName1 = o1.name.split(" ")[1]; 
         String lastName2 = o2.name.split(" ")[1]; 
         return lastName1.compareTo(lastName2); 
        } 
    } 
    
    ... 
    
    List<CricketTeam> team = new ArrayList<CricketTeam>(); 
    ... 
    Collections.sort(team, new CricketTeamComparator()); 
    
  2. 它是更清洁,更简洁,更安全(例如避免在多个具体微妙的错误嵌入式循环,迭代器太频繁地通过调用next()太多次)。
    代码示例(从Effective Java 2nd Edition,项目46:体型的for-each循环到传统for循环):

    // Can you spot the bug? 
    enum Suit { CLUB, DIAMOND, HEART, SPADE } 
    enum Rank { ACE, DEUCE, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, 
    NINE, TEN, JACK, QUEEN, KING } 
    ... 
    Collection<Suit> suits = Arrays.asList(Suit.values()); 
    Collection<Rank> ranks = Arrays.asList(Rank.values()); 
    List<Card> deck = new ArrayList<Card>(); 
    for (Iterator<Suit> i = suits.iterator(); i.hasNext();) 
        for (Iterator<Rank> j = ranks.iterator(); j.hasNext();) 
        deck.add(new Card(i.next(), j.next())); 
    
+1

@Deepak,看我的更新。 – 2011-04-06 13:36:54

+2

Torok:String.split()实际上可以处理正则表达式字符串,因此实现split步骤的更好方法是使用split(“\\ s +”)'而不是'split(“”)''。 '+'分隔符保证了如果数据在第一个和最后一个名字之间输入时有过多的空格,那么在分割字符串数组中将不会得到'[“First”,“”,“Last”]'你的比较。 – Legs 2011-05-01 06:12:36

+0

或者'splitted = split(“”)','lastName = splitted [splitted.length - 1]'如果有人决定插入一个中间名... – Theodor 2013-05-02 15:54:09

1

对于问题1的基础上,_(空间可拆分的name串)分隔符,然后根据name_arr[1]数组元素进行排序? “重新组合”用于报告的数组元素。

这是一个使用简单数组的代码示例。由于要求是根据姓氏进行排序,因此会根据空格分隔符分割字符串,翻转结果名称,对数组进行排序,然后通过“重新翻转”进行重新组合(困惑,但是?:)

public static String[] FlipAndSort (String[] name) { 

     for (int i=0;i<name.length;i++) { 
      String [] flip = name[i].split(" "); 
      name[i]=flip[1]+" "+flip[0]; 
     } 
     Arrays.sort(name); 
     for (int i=0;i<name.length;i++) { 
      String [] flip = name[i].split(" "); 
      name[i]=flip[1]+" "+flip[0]; 
     } 
     return name; 
    } 

对于问题2,可读性是我个人的喜好...

+0

你能给我一个第一个问题的工作示例 – Deepak 2011-04-06 13:32:55

+0

检查编辑... – rs79 2011-04-06 15:24:22

+0

谢谢rs79 !!!! – Deepak 2011-04-06 16:22:21

1

1.检查此示例代码:

// assuming this is the list with cricket players 
List<CricketTeam> team; 

Collections.sort(team, new Comparator<CricketTeam>) { 
    int compare(CricketTeam o1, CricketTeam o2) { 
     return o1.name.split(" ")[1].compareTo(o2.name.split(" ")[1]) 
    } 
} 

2.It更具可读性,更易于使用,并隐藏不必要的细节。

+0

你可以给我一个第一个问题的工作示例 – Deepak 2011-04-06 13:32:22

+0

我只是做了:-)。您只需创建“团队”列表并填写一些样本值。 – pajton 2011-04-06 14:31:02