【发布时间】:2020-05-11 12:23:27
【问题描述】:
我不知道如何在 Java 中的 Arraylist 中实现二进制搜索过程。
有两个数组列表显示机场名称和两个机场名称之间的路线。
下面定义了 airportName 和 Route Class。
public class AirportName{
private String airportName;
}
public class Route{
private String takeOffPoint;
private String landingPoint;
}
机场名称定义为机场名称的缩写,例如 Arraylist 中的 (JFK) 路线名称定义为一个路线对象,包括 Arraylist 中的起飞点和着陆点,例如 (肯尼迪-TLV)
因为每个30000以上的arraylist中有很多机场名称和航线,所以我不得不使用二分查找来实现代码的优化。
我已经在不使用二分搜索的情况下完成了这个过程。
我如何通过二分查找来做到这一点?
这是我的代码 sn-p 如下所示。
ArrayList<AirportName> airportNames = ShowProcess.getAirports();
ArrayList<Route> routeNamesList = ShowProcess.getAirportRoutes();
飞机名称
Scanner sc = new Scanner(System.in);
System.out.print("Enter AirportName : ");
String airportName = sc.nextLine();
boolean checkAirportNameValid = false;
for(AirportName airport : airportNames) {
if(airport.getAirportName().equals(airportName)) {
checkAirportNameValid = true;
}
}
路线名称
public static ArrayList<String> searchProcess(String airportName, ArrayList<Route> routeNamesList) {
ArrayList<String> destinationNames = new ArrayList<String>();
for(Route route : routeNamesList) {
if(route.getTakeOffPoint().equals(airportName)) {
destinationNames.add(route.getLandingPoint());
}
}
return destinationNames;
}
【问题讨论】:
-
您的列表是否已预先排序?
-
@user 这是一种线性搜索,但由于它的大小,我必须使用二进制搜索来搜索列表中的项目。
-
好的,但是您的列表已经排序了吗?
-
@user 未排序。
-
那么二分查找可能不值得。线性搜索是O(n),二分搜索是O(nlogn)(更实际)
标签: java arraylist binary-search