Có một bản sao riêng của mảng mStack
với chuỗi đại diện, theo mặc định khởi tạo với chuỗi rỗng, vì vậy vòng lặp của bạn sẽ là:
String [] mStackCopy = new String[]{"","","","","","","","","","",};
// or mstackCopy = new String[mStack.length];
// for(int i = 0 ; i < mStackCopy.lenght ; i++) { mStack[i] = "" }
Ngoài ra, tạo StringBuilder với đủ công suất:
StringBuilder sb = new StringBuilder(10000);// 10k chars or whatever makes sense.
Vì vậy, khi bạn cần để tạo ra các thông điệp mà bạn sẽ chỉ đơn giản là:
for (int i = 0; i <= step; i++) {
sb.append(mStackCopy[i]);
}
Và trống phần sẽ không gây ra một vấn đề, vì họ là trống đã:
Bạn thậm chí có thể cứng mã nó:
sb.append(mStackCopy[0]);
sb.append(mStackCopy[1]);
sb.append(mStackCopy[2]);
sb.append(mStackCopy[3]);
sb.append(mStackCopy[4]);
sb.append(mStackCopy[5]);
sb.append(mStackCopy[6]);
sb.append(mStackCopy[7]);
sb.append(mStackCopy[8]);
sb.append(mStackCopy[9]);
Nhưng điều này sẽ gây ra đau đớn hơn cứu trợ trong tương lai, đảm bảo.
Khi bạn thêm một cái gì đó để mStack của bạn:
MStack item = new MStack();
item.setCurrentMessage("Some message");
....
Chỉ cần tạo một bản sao của thông điệp và gắn "" rồi.
addToMStack(int position, MStackItem item) {
mStack[position] = item;
mStackCopy[position] = item.getCurrentMessage() + ", ";
}
Và tùy thuộc vào sự xuất hiện của null (nếu thấp), bạn có thể bắt chúng
addToMStack(int position, MStackItem item) {
if(item == null) { return; }
mStack[position] = item;
try {
mStackCopy[position] = item.getCurrentMessage() + ", ";
} catch(NullPointerException npe){}
}
Đó là khủng khiếp
Hoặc xác nhận điều đó:
addToMStack(int position, MStackItem item) {
if(item == null) { return; }
mStack[position] = item;
mStackCopy[position] = item.getCurrentMessage() + ", ";
}
Tôi khá chắc chắn phương pháp của bạn đang làm điều gì đó khác mà bạn không cho chúng tôi thấy. Có lẽ lý do là ở đó.
Ngoài ra, 16% không phải là xấu, nếu 100% là 1 giây.
phương pháp của bạn nói nó có một kiểu trả về của RatedMessage nhưng nó xuất hiện trở lại một chuỗi. Có chuyện gì thế? Ngoài ra, các đối tượng rm.msg này lớn đến mức nào, chúng có phải là các chuỗi hoặc có một hàm toString ngầm được gọi lên chúng không? – luke
Xin lỗi, tôi đã giảm mã xuống phần thiết yếu. Có một tỷ lệ, số phao cho mỗi msg. rm là viết tắt của RatingMessage. – Pentium10
@ Pentium10, tôi nghĩ bạn cắt quá nhiều. Bạn có một điểm nóng và bạn về cơ bản giả định rằng một số điều không phải là vấn đề và sau đó hỏi về phần còn lại. Nếu bạn có mã làm việc mà bạn đã hiển thị vẫn còn chậm nhưng đơn giản hơn (nếu bị hỏng theo nghĩa là nó trả lời sai), điều đó thật tuyệt, nhưng đừng cắt ra quá nhiều và mong đợi để có được câu trả lời có ý nghĩa ở đây. – Yishai