4 回答

TA貢獻1859條經驗 獲得超6個贊
你的代碼有三個問題:
1,數組越界問題 ,sidOnLineList.remove(student.getSid()); // 移除
這個E remove(int index);是位置,還不是學生的號碼,這直接導至這個異常。
2,多線程并發問題,List<Integer> sidOnLineList 這列表如果選用非線程安全實現,那當多個用戶并發登錄注消就會有問題 。如果選用線程安全實現,則性能會有問題 。推薦使用ConcurrentHashMap。
3,內容泄漏問題,如果用戶不是主動退出(如超時或直接關掉瀏覽器),則會有內存溢出問題 。所以隊列需要有超時或先進先出機制。

TA貢獻1796條經驗 獲得超4個贊
是因為存在數據,而今天沒有數據了,你的數組length為0,而你還在取array[0],當然就數組下標越界了。
(1)看到上述報錯的第一反應是,越界了。List.size()為0,但卻引用了index為0的值,并且此時List不為空。
(2)那什么情況下會出現List不為null,但是List.size() == 0呢?下面給出示例:
List list = new ArrayList();
此時list被創建,即list不為null,但是還沒有被賦值,則list.size() == 0。
所以在使用List時應當同時判斷(list != null && list.size() > 0)。
(3)此種問題的解決方案:在使用list.get(0 ...... N)進行取值前對list和list.size()進行判斷。

TA貢獻1784條經驗 獲得超9個贊
索引越界了吧
比如String[] a=new String[5]; 你調用了String[10]
List list=new Arraylist();
list.add("123");
list.get(10)
又或者String a="abc"; 你調用了a.substring(0,10)
就是這些問題唄

TA貢獻1824條經驗 獲得超5個贊
sidOnLineList.remove(student.getSid()); // 移除 你看一下 sidOnLineList 這個List 里面有沒有東西,然后看一下student.getSid() 這個出的的什么? 要不不好判斷
添加回答
舉報