Java:Java面试问题的澄清

Dee*_*pak 1 java comparator

我最近参加了Java面试问题并得到了以下查询,我不知道答案

1>我有下课

 class CricketTeam{             
   String name; //this is the complete name(inclusive of first and last name)          
 }             
Run Code Online (Sandbox Code Playgroud)

板球运动员的名字如下:

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

我想通过他们的last name only.Suugestions /代码对上面的Cricket Players名称进行排序.我们将不胜感激.

2> 在java 中使用enhanced for loop反对 iterator有什么好处.在java中使用增强的for循环的优点是什么?为什么它可以在java工作时首先在java中引入iterator.

Pét*_*rök 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());
    
    Run Code Online (Sandbox Code Playgroud)
  2. 它更干净,更简洁,更安全(例如,当迭代器通过调用next()太多次而意外增加时,避免了多个嵌入循环中的特定细微错误).
    代码示例(来自Effective Java 2nd Edition,Item 46:Prefer for-each loops to traditional for loops):

    // 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()));
    
    Run Code Online (Sandbox Code Playgroud)

  • Torok:String.split()实际上使用正则表达式字符串,因此实现拆分步骤的更好方法是使用`split("\\ s +")`而不是`split("")`.`+`quatifier确保如果输入的数据在名字和姓氏之间有多余的空格,你就不会在你的分裂字符串数组中得到`["First","","Last"]`你的比较器. (2认同)