gpt4 book ai didi

java - 泛型和性能问题

转载 作者:行者123 更新时间:2023-12-01 06:59:29 25 4
gpt4 key购买 nike

我想知道是否有人可以查看我编写的类,我在 Eclipse 中收到一般警告,我只是想知道它是否可以被清理。我收到的所有警告都在下面的代码中用 ** 括起来。

该类采用 (hh:mm AM/PM) 形式的字符串列表,并将它们转换为 HourMinute 对象,以便查找列表中当前时间之后的第一个时间。

我也很好奇是否有更有效的方法来做到这一点。这很好用,但我内心的学生只是想知道如何才能做得更好。

public class FindTime {
private String[] hourMinuteStringArray;

public FindTime(String[] hourMinuteStringArray){
this.hourMinuteStringArray = hourMinuteStringArray;
}

public int findTime(){

HourMinuteList hourMinuteList = convertHMStringArrayToHMArray(hourMinuteStringArray);
Calendar calendar = new GregorianCalendar();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
HourMinute now = new HourMinute(hour,minute);
int nearestTimeIndex = findNearestTimeIndex(hourMinuteList, now);
return nearestTimeIndex;
}

private int findNearestTimeIndex(HourMinuteList hourMinuteList, HourMinute now){
HourMinute current;
int position = 0;
Iterator<HourMinute> iterator = **hourMinuteList.iterator()**;
while(iterator.hasNext()){
current = (HourMinute) iterator.next();
if(now.compareTo(current) == -1){
return position;
}
position++;
}
return position;
}


private static HourMinuteList convertHMStringArrayToHMArray(String[] times){
FindTime s = new FindTime(new String[1]);
HourMinuteList list = s.new HourMinuteList();
String[] splitTime = new String[3];
for(String time : times ){
String[] tempFirst = time.split(":");
String[] tempSecond = tempFirst[1].split(" ");
splitTime[0] = tempFirst[0];
splitTime[1] = tempSecond[0];
splitTime[2] = tempSecond[1];
int hour = Integer.parseInt(splitTime[0]);
int minute = Integer.parseInt(splitTime[1]);
HourMinute hm;
if(splitTime[2] == "AM"){
hm = s.new HourMinute(hour,minute);
}
else if((splitTime[2].equals("PM")) && (hour < 12)){
hm = s.new HourMinute(hour + 12,minute);
}
else{
hm = s.new HourMinute(hour,minute);
}

**list.add(hm);**
}
return list;
}
class **HourMinuteList** extends **ArrayList** implements RandomAccess{

}
class HourMinute implements **Comparable** {
int hour;
int minute;

public HourMinute(int hour, int minute) {
setHour(hour);
setMinute(minute);
}

int getMinute() {
return this.minute;
}
String getMinuteString(){
if(this.minute < 10){
return "0" + this.minute;
}else{
return "" + this.minute;
}
}

int getHour() {
return this.hour;
}

void setHour(int hour) {
this.hour = hour;
}

void setMinute(int minute) {
this.minute = minute;
}

@Override
public int compareTo(Object aThat) {

if (aThat instanceof HourMinute) {
HourMinute that = (HourMinute) aThat;
if (this.getHour() == that.getHour()) {
if (this.getMinute() > that.getMinute()) {
return 1;
} else if (this.getMinute() < that.getMinute()) {
return -1;
} else {
return 0;
}
} else if (this.getHour() > that.getHour()) {
return 1;
} else if (this.getHour() < that.getHour()) {
return -1;
} else {
return 0;
}
}

return 0;
}

}


If you have any questions let me know.

Thanks,
Rob

最佳答案

这是因为您没有为 List 和 Comparable 实例指定泛型,所以可以支持泛型。您可以使用以下方式重写代码:

class HourMinuteList extends ArrayList<HourMinute> implements RandomAccess{

}
class HourMinute implements Comparable<HourMinute> {

public int compareTo(HourMinute aThat) {
....
}
}

注意:泛型不是必需的,并且在运行时不使用,但最好使用它们,因为它可以帮助您避免代码中的一些错误。

关于java - 泛型和性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2755133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com