阅读Arraylist的最后部分:Java

时间:2012-03-23 05:27:09

标签: java arraylist

我正在尝试阅读arraylist的最后8个部分。但我遇到了一些麻烦。到目前为止,这是我的代码:

for(int j2 = 0; j2 < chatList.size() && j2 < 8; j2++)
    {
        if(chatEnabled) GameMain.CourierFont(this,""+chatList.get(j2), cWindowX + 4, cWindowY - (16 + -j2 * 10));
    }

有人可以帮帮我吗? 感谢。

8 个答案:

答案 0 :(得分:1)

试试这个循环:

 for(int j2 = chatList.size() - 8; j2 < chatList.size(); j2++)

答案 1 :(得分:1)

使用subList()可能很方便:

List<Chat> chatList = new ArrayList<Chat>();
// initialize
int last = chatList.size();
int first = last - Math.min(8, chatList.size());
List<Chat> recent = chatList.subList(first, last);

答案 2 :(得分:0)

而不是阅读ArrayList的最后8部分,而您的for循环首先读取 8。

你想要做的是从size-8th元素开始然后循环直到最后一个元素,因此你的代码看起来像:

int size = chatList.size();
int start = (size > 8) ? size - 8 : 0;

for(int j2 = start; j2 < size; j2++) {
   ...
}

编辑:忘记size可能小于8的情况。如果是这种情况,那么您应该从元素0开始。

答案 3 :(得分:0)

int j2 = chatList.size() - 8;
while(j2 < chatList.size() && (chatList.size() - 8) >= 0) {
    if(chatEnabled) GameMain.CourierFont(this,""+chatList.get(j2), cWindowX + 4, cWindowY - (16 + -j2 * 10));
}

我认为你应该检查你的chatList的大小是否超过8

答案 4 :(得分:0)

int chatListSize = chatList.size();

// if you do not do this check,the code will fail miserably.
if ( chatListSize > 8) {

for(int i = chatListSize - 8; i < chatListSize; i++) {    

            //TO-DO
     } 


}

答案 5 :(得分:0)

您的病情 j2&lt; chatList.size()&amp;&amp; j2&lt; 8 将检查j2是否小于列表大小和8,表示循环将从索引0迭代到7 ,它不会读取最后8个元素而是读取前8个元素。

相反,您可以将您的条件视为

j2<chatList.size() && j2>=chatList.size()-8

答案 6 :(得分:0)

    List l1 = new ArrayList();       
    int size=l1.size();
    int i;
    for(i=size-8;i<size;i++)
    {
        System.out.println(l1.get(i));
    }
    }

我认为这是一种简单的方法。

答案 7 :(得分:0)

尝试以下循环:

int size = charList.size() > 7 ? charList.size() - 8 : 0;
for(int j2 = size; j2< charList.size();j2++)