【发布时间】:2014-03-09 18:42:01
【问题描述】:
我有这么长的对象数组:
public static class __Location {
public __Location(int locationId, String locationDesc) {
this.LocationId = locationId;
this.LocationDesc = locationDesc;
}
public int LocationId;
public String LocationDesc;
}
public static __Location[] LOCATIONS = { new __Location(100, "Afghanistan"), new __Location(110, "Albania"), new __Location(120, "Algeria"),
new __Location(130, "American Samoa"), new __Location(140, "Andorra"), new __Location(150, "Angola"), new __Location(160, "Anguilla"),
new __Location(170, "Antarctica"), new __Location(180, "Antigua And Barbuda"), new __Location(190, "Argentina"), new __Location(200, "Armenia"),
new __Location(210, "Aruba"), new __Location(220, "Australia"), new __Location(230, "Austria"), new __Location(240, "Azerbaijan"),
new __Location(250, "Bahamas"), new __Location(260, "Bahrain"), new __Location(270, "Bangladesh"), new __Location(280, "Barbados"),
new __Location(290, "Belarus"), new __Location(300, "Belgium"), new __Location(310, "Belize"), new __Location(320, "Benin"),
new __Location(330, "Bermuda"), new __Location(340, "Bhutan"), new __Location(350, "Bolivia"), new __Location(360, "Bosnia And Herzegovina"),
new __Location(370, "Botswana"), new __Location(380, "Bouvet Island"), new __Location(390, "Brazil"),
new __Location(400, "British Indian Ocean Territory"), ...
我的问题是如何有效地在这个长数组中搜索一个项目(根据它的键值,即 LocationId)。
【问题讨论】:
-
如果数组是排序好的,可以使用二分查找。
-
locationId是唯一的吗? -
如果阵列中的所有位置都是唯一的,您应该考虑实现
.equals()/.hashCode()并使用HashSet。 -
@Solace 好点,但这需要
__Location来实现Comparable<__Location>,或者使用Comparator<__Location> -
请使用Java naming conventions - 类应以
PascalCase命名。__Location应该是Location。