java List集合
CreateTime--2017年5月26日08:28:30
Author:Marydon
三、java數(shù)據(jù)類(lèi)型之List(集合)
需要導(dǎo)入的包:
import java.util.List; import java.util.ArrayList;(一)數(shù)據(jù)格式
[指定索引并強(qiáng)行插入, 不指定索引插入, 指定索引并按順序插入]UpdateTime--2017年12月6日16:10:19
(二)初始化
// 方式一:初始化list,當(dāng)?shù)谝粋€(gè)元素添加后,容量大小將設(shè)為10 List<String> list01 = new ArrayList<String>(); // 方式二:初始化list并指定集合容量大小 List list02 = new ArrayList(8);?說(shuō)明:
初始化的時(shí)候既可以指定集合初始容量大小也可以不指定,主要涉及的是內(nèi)存的優(yōu)化,以后需要再說(shuō);// TODO
初始化的時(shí)候既可以對(duì)泛型進(jìn)行控制也可以不做泛型控制,建議添加泛型控制;
list集合的初始size為0,可容納的元素?cái)?shù)為1;
可容納的元素個(gè)數(shù)為[0,list.size],每增加一個(gè)元素,size就會(huì)+1,并且可容納的元素個(gè)數(shù)會(huì)隨著list.size的遞增而遞增;
當(dāng)現(xiàn)有容量無(wú)法承載時(shí),容量會(huì)自動(dòng)擴(kuò)增,具體擴(kuò)增多少,有待研究。// TODO
(三)常用操作
3.3.1 增
UpdateTime--2017年9月5日08:48:02 往List中插入數(shù)據(jù)有兩種方式: 方式一:按順序插入元素 語(yǔ)法: list.add(element) 舉例: List<Object> list = new ArrayList<Object>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); 方式二:將元素插入到List中指定位置 語(yǔ)法: list.add(index, element) 用途:向集合中添加一個(gè)元素 說(shuō)明: 使用這種方式插入元素的條件:該元素下標(biāo)已在集合中存在; 插入后造成的影響:在該索引的內(nèi)容變更為強(qiáng)行插入的內(nèi)容,并且原來(lái)在該元素下標(biāo)的內(nèi)容及排在該元素下標(biāo)后面的內(nèi)容的索引號(hào)+1; 舉例論證: List<String> list = new ArrayList<String>(); list.add("不指定索引插入"); list.add(1,"指定索引并按順序插入");// list.add(5,"指定索引但間隔插入");// 運(yùn)行時(shí)會(huì)報(bào)錯(cuò):java.lang.IndexOutOfBoundsException: Index: 5, Size: 2; // 因?yàn)槌隽薼ist的范圍,此時(shí)list.size=2 System.out.println(list.toString());// [不指定索引插入, 指定索引并按順序插入] list.add(0,"指定索引并強(qiáng)行插入"); System.out.println(list.toString());// [指定索引并強(qiáng)行插入, 不指定索引插入, 指定索引并按順序插入往List中插入數(shù)據(jù)的第三種方式
語(yǔ)法:
list.putAll(list2)
用途:將一個(gè)集合中的所有元素拷貝到另一個(gè)集合當(dāng)中
// 代碼片斷一 List<String> list = new ArrayList<String>(); list.add("不指定索引插入"); list.add(1,"指定索引并按順序插入"); list.add(0,"指定索引并強(qiáng)行插入"); List<String> list2 = new ArrayList<String>(); list2.add("將list中的元素全部復(fù)制給list2"); // 將list中的元素全部復(fù)制給list2,返回Boolean類(lèi)型結(jié)果,用于校驗(yàn)是否拷貝成功 boolean isCopySuccess = list2.addAll(list);說(shuō)明:
putAll()方法將list集合中的所有元素都拷貝到了list2集合中,該方法實(shí)現(xiàn)了完全拷貝而不是像Map那樣只是對(duì)對(duì)象的引用。
舉例論證: // 接著上面的代碼 // 清除list list.clear(); // 打印list System.out.println("list中內(nèi)容為:" + list.toString());// {} // 打印list2 System.out.println("list2中內(nèi)容為:" + list2.toString());// [將list中的元素全部復(fù)制給list2, 指定索引并強(qiáng)行插入, 不指定索引插入, 指定索引并按順序插入] // 實(shí)驗(yàn)證明:list2中的內(nèi)容并沒(méi)有因?yàn)閘ist中的內(nèi)容清空而受到影響,即深層拷貝3.3.2 刪 ?
方式一:使用remove() 語(yǔ)法: list.remove(index/element) 用途:移除集合中一個(gè)指定的元素 用法一:按元素下標(biāo)(index)進(jìn)行移除 // 接著代碼片斷一 // 按元素下標(biāo)進(jìn)行移除 list2.remove(0); System.out.println("移除list中的第一個(gè)元素后:" + list2.toString());// [不指定索引插入, 指定索引并按順序插入, 將list中的元素全部復(fù)制給list2]? 用法二:元素內(nèi)容(element)進(jìn)行移除 // 接著代碼片斷一 list2.add("將list中的元素全部復(fù)制給list2"); System.out.println(list2.toString());// [將list中的元素全部復(fù)制給list2, 指定索引并強(qiáng)行插入, 不指定索引插入, 指定索引并按順序插入, 將list中的元素全部復(fù)制給list2] // 按集合元素所對(duì)應(yīng)的內(nèi)容進(jìn)行移除,這種方式只能移除第一次匹配到的元素 list2.remove("將list中的元素全部復(fù)制給list2"); System.out.println(list2.toString());// [指定索引并強(qiáng)行插入, 不指定索引插入, 指定索引并按順序插入, 將list中的元素全部復(fù)制給list2]說(shuō)明:按元素內(nèi)容進(jìn)行移除,這種方式只會(huì)移除第一次匹配到的元素??
方式二:使用clear() 語(yǔ)法: list.clear() 用途:清除集合中的所有元素 // 接著代碼片斷一 // 清除list list.clear(); // 判斷l(xiāng)ist集合是否為空 boolean isEmptyList = list.isEmpty(); if (isEmptyList) {System.out.println("list中內(nèi)容為:" + list.toString());// {} }? 3.3.3 改 語(yǔ)法: list.set(index,content) // 接著代碼片斷一 // 修改指定元素下標(biāo)對(duì)應(yīng)的內(nèi)容 String updateMsg = list2.set(2, ""); System.out.println("下標(biāo)為2的元素之前所代表的內(nèi)容是:" + updateMsg);// 不指定索引插入? 3.3.4 取值 語(yǔ)法: list.get(index)? // 接著代碼片斷一 // 獲取指定元素下標(biāo)所對(duì)應(yīng)的內(nèi)容 String elementMsg = list2.get(2); System.out.println(elementMsg);// 不指定索引插入 3.3.5 迭代集合/*** 方法一:使用forEach遍歷(推薦使用)* 類(lèi)型、別名、數(shù)組名*/ for (Object li:list) {System.out.println(li); } /*** 方法二:使用迭代器1*/ Iterator<Object> it = list.iterator(); while(it.hasNext()) {System.out.println(it.next()); } /*** 方法三:使用迭代器方法2*/ for (Iterator<Object> ite=list.iterator();ite.hasNext();) {System.out.println(ite.next()); } /***方法四: 使用for循環(huán)*/ System.out.println("使用for循環(huán)遍歷"); for (int i=0;i<list.size();i++) {System.out.println(list.get(i)); }
?
(四)其他用法
UpdateTime--2017年7月21日08:55:01
3.4.1 非空判斷
UpdateTime--2017年7月26日16:52:42
方法一:使用isEmpty()方法(推薦使用)
if (!list.isEmpty()) {//對(duì)list進(jìn)行操作 }? 方法二:使用size()方法
如果集合為空,返回的是0。?
UpdateTime--2018年1月29日11:31:37
3.4.2 contains
用途:用于判斷集合中是否包含指定字符串(該元素是否已經(jīng)存在)
返回值:包含-TRUE,不包含-FALSE
(五)格式轉(zhuǎn)換
3.5.1 List集合轉(zhuǎn)換成json代碼(List-->JSONArray)
List list = newArrayList(); list.add( "first" ); list.add( "second" ); JSONArray jsonArray2 =JSONArray.fromObject( list );更多介紹請(qǐng)移步文章:java-JOSN?
UpdateTime--2017年12月6日17:28:37
共用代碼
List<String> list2 = new ArrayList<String>(); list2.add("不指定索引插入"); list2.add("指定索引并按順序插入"); list2.add("");3.5.2?list轉(zhuǎn)字符串(List-->String)
// list轉(zhuǎn)字符串(List-->String) String listStr = list2.toString(); System.out.println(listStr);// [不指定索引插入, 指定索引并按順序插入, ]說(shuō)明:
轉(zhuǎn)換后的字符串,兩邊分別包含的是"[]"
格式:"[str1, str2, str3, ...]"
進(jìn)一步轉(zhuǎn)換:去除[]
listStr.substring(1, listStr.length() - 1)?
3.5.3?list轉(zhuǎn)數(shù)組(list-->array)
// list轉(zhuǎn)數(shù)組(list-->array) // 方式一:這種方式只能用Object形式的[]接收,不能強(qiáng)制轉(zhuǎn)換 Object[] array = list2.toArray(); System.out.println(Arrays.toString(array));// [不指定索引插入, 指定索引并按順序插入, ] // 方式二 String[] array2 = new String[list2.size()]; list2.toArray(array2); System.out.println(Arrays.toString(array2));// [不指定索引插入, 指定索引并按順序插入, ]??
(六)進(jìn)一步封裝
UpdateTime--2017年5月31日17:42:03
3.6.1 大集合拆分成小集合
/*** 拆分集合* @param <T>* @param resList* 要拆分的集合* @param count* 每個(gè)集合的元素個(gè)數(shù)* @return 返回拆分后的各個(gè)集合*/ public static <T> List<List<T>> split(List<T> resList, int count) {if (resList == null || count < 1)return null;List<List<T>> ret = new ArrayList<List<T>>();int size = resList.size();if (size <= count) { // 數(shù)據(jù)量不足count指定的大小 ret.add(resList);} else {int pre = size / count;int last = size % count;// 前面pre個(gè)集合,每個(gè)大小都是count個(gè)元素for (int i = 0; i < pre; i++) {List<T> itemList = new ArrayList<T>();for (int j = 0; j < count; j++) {itemList.add(resList.get(i * count + j));}ret.add(itemList);}// last的進(jìn)行處理if (last > 0) {List<T> itemList = new ArrayList<T>();for (int i = 0; i < last; i++) {itemList.add(resList.get(pre * count + i));}ret.add(itemList);}}return ret;}? 示例:見(jiàn)iBATIS文章中的批量插入
// TODO 待研究:List泛型
?
(七)功能實(shí)現(xiàn)?
?
轉(zhuǎn)載于:https://www.cnblogs.com/Marydon20170307/p/6906794.html
總結(jié)
以上是生活随笔為你收集整理的java List集合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 对应用程序启动时所有方法的调用顺序分析
- 下一篇: Windows下RabbitMQ安装,部