在Java中,List是一個非常常用的集合類型,可以方便地存儲一組元素並進行各種操作。而當我們需要獲取List中的某一部分時,可以使用subList方法。本文將詳細闡述subList方法的使用及注意事項。
一、subList方法介紹
subList方法是List介面的一個成員方法,用於獲取列表中指定範圍內的子列表。它的聲明如下:
List subList(int fromIndex, int toIndex)
其中,fromIndex是子列表的起始下標(包含),toIndex是子列表的結尾下標(不包含)。例如,如果我們要獲取列表的前3個元素,代碼應該是這樣的:
List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); List<Integer> subList = list.subList(0, 3);
這樣,subList就會成為一個包含1、2、3三個元素的List。
二、subList方法使用注意事項
1. subList生成的子列表與原列表共享底層數組
這意味著,修改子列表中的元素會直接影響到原列表中對應位置的元素。例如,我們使用上文中的代碼創建了一個列表和一個子列表:
List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); List<Integer> subList = list.subList(0, 3);
然後,我們修改子列表中的第一個元素:
subList.set(0, 5);
這時,原列表中的第一個元素也會變成5。
2. subList生成的子列表支持隨機訪問但不支持修改結構
隨機訪問是指,我們可以通過下標來直接訪問子列表中的元素。例如:
int elem = subList.get(1); // 訪問子列表中的第二個元素
但如果我們嘗試修改子列表的結構,例如添加或刪除元素,就會拋出UnsupportedOperationException異常。例如:
subList.add(5); // 拋出異常 subList.remove(1); // 拋出異常
因此,如果需要對子列表進行結構性修改,最好還是使用原列表來操作。
3. subList方法返回的是原列表的一個視圖
這意味著,如果我們對原列表進行了修改,子列表也會受到影響。例如:
list.add(5); // 向原列表中添加一個元素 int size = subList.size(); // 子列表的長度變為4
這是因為子列表只是原列表的一個階段性視圖,它們共享同樣的底層數組。
三、subList方法示例
以下代碼示例展示了如何使用subList方法來實現對列表的分頁操作。
1. 生成數據列表
List<Integer> dataList = new ArrayList<>(); for (int i = 1; i <= 50; i++) { dataList.add(i); }
2. 分頁獲取數據
int pageSize = 10; // 每頁數據條數 int totalPage = dataList.size() % pageSize == 0 ? dataList.size() / pageSize : dataList.size() / pageSize + 1; // 總頁數 for (int i = 1; i <= totalPage; i++) { // 計算當前頁數據在列表中的下標範圍 int fromIndex = (i - 1) * pageSize; int toIndex = i * pageSize > dataList.size() ? dataList.size() : i * pageSize; // 獲取當前頁數據列表 List<Integer> pageDataList = dataList.subList(fromIndex, toIndex); // 列印當前頁數據 System.out.println("第" + i + "頁數據:" + pageDataList); }
以上代碼會將50個數據分為5頁,每頁10個。輸出結果如下:
第1頁數據:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 第2頁數據:[11, 12, 13, 14, 15, 16, 17, 18, 19, 20] 第3頁數據:[21, 22, 23, 24, 25, 26, 27, 28, 29, 30] 第4頁數據:[31, 32, 33, 34, 35, 36, 37, 38, 39, 40] 第5頁數據:[41, 42, 43, 44, 45, 46, 47, 48, 49, 50]
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/236440.html