2011-04-06 52 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