我最近参加了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
的优点是什么?
java.what中的iterator
是在java中使用增强的for循环的优点,为什么在iterator
可以完成工作时首先在java中引入它。?
答案 0 :(得分:10)
实现一个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());
它更干净,更简洁,更安全(例如,避免多个嵌入循环中的特定细微错误,当迭代器因调用next()
太多次而意外增加时)。
代码示例(来自Effective Java 2nd Edition,第46项:首选每个循环到传统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 :(得分:2)
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.它更易读,更易于使用,并隐藏不必要的细节。
答案 2 :(得分: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,可读性是我个人的偏好......