List 在迭代时可能抛出的异常
今天在做小練習時遇到有關List在迭代時的一些小問題.寫出與大家一起共享下吧..呵呵...
===================代碼============================
public List getFavoriteBytag(String tagString) {
??Session session = HibernateSessionFactory.getSession();
??List list = null;
??// List resultList = null;
??String hqlString = "from Favorite";
??String[] tagStrings = null;
??Favorite favorite = null;
??try {
?? list = commomDao.getList(hqlString);
?? Iterator iterator = list.iterator();
?? // resultList = new ArrayList();
?? while (iterator.hasNext()) {
????favorite = (Favorite) iterator.next();
????/*
???? * System.out.println(favorite.getFTags()); System.out.println("<br>");
???? */
????tagStrings = favorite.getFTags().split(",");
????for (int i = 0; i < tagStrings.length; i++) {
???? System.out.println(tagStrings
?????? + "===========================\n");
???? if (tagString.equals(tagStrings)) {
??????// resultList.add(favorite);
??????list.add(favorite);
??????System.out.println("haaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
??????System.out.println("------------" + tagStrings
????????+ "--------------------");
???? }
????}
?? }
??} catch (RuntimeException e) {
?? System.out
???? .println("FavoriteSerachBizImpl.getFavoriteBytag()方法有錯誤!!!");
?? e.printStackTrace();
?? throw e;
??} finally {
?? session.close();
??}
??// return resultList;
??return list;
}
先描述一下問題吧..
首先我把表favorite表中的所有數(shù)據(jù)全部查出放在了List集合中,然后調(diào)用List的iterator()方法把得到的結果又放到了Iterator集合中(為了好遍歷吶.)當我遍歷某一行時我把當前行的某列(String類型)通過String的split(",")把得到的這一列通","拆分成一個String的數(shù)組.在后我在遍歷這個數(shù)組.如果這個數(shù)組中有與我傳進來的參數(shù)(tagString)相同的話,我就把該行放到List集合中吶.由于我前后用的是同一個List,即(list)所以在運行該程序時拋出了java.util.ConcurrentModificationException這么個異常
...誒...慚愧吶...呵呵...
public class ConcurrentModificationExceptionextends RuntimeException當方法檢測到對象的并發(fā)修改,但不允許這種修改時,拋出此異常。
例如,某個線程在 Collection 上進行迭代時,通常不允許另一個線性修改該 Collection。通常在這些情況下,迭代的結果是不確定的。如果檢測到這種行為,一些迭代器實現(xiàn)(包括 JRE 提供的所有通用 collection 實現(xiàn))可能選擇拋出此異常。執(zhí)行該操作的迭代器稱為快速失敗 迭代器,因為迭代器很快就完全失敗,而不會冒著在將來某個時間任意發(fā)生不確定行為的風險。
注意,此異常不會始終指出對象已經(jīng)由不同 線程并發(fā)修改。如果單線程發(fā)出違反對象協(xié)定的方法調(diào)用序列,則該對象可能拋出此異常。例如,如果線程使用快速失敗迭代器在 collection 上迭代時直接修改該 collection,則迭代器將拋出此異常。
注意,迭代器的快速失敗行為無法得到保證,因為一般來說,不可能對是否出現(xiàn)不同步并發(fā)修改做出任何硬性保證。快速失敗操作會盡最大努力拋出 ConcurrentModificationException。因此,為提高此類操作的正確性而編寫一個依賴于此異常的程序是錯誤的做法,正確做法是:ConcurrentModificationException 應該僅用于檢測 bug。
總結
以上是生活随笔為你收集整理的List 在迭代时可能抛出的异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在家中制作健康美味的排骨汤?
- 下一篇: 鱼头什么不能吃?