博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java List集合
阅读量:5864 次
发布时间:2019-06-19

本文共 6223 字,大约阅读时间需要 20 分钟。

 

CreateTime--2017年5月26日08:28:30

Author:Marydon

三、java数据类型之List(集合)

  需要导入的包:

import java.util.List;import java.util.ArrayList;

  (一)数据格式

[指定索引并强行插入, 不指定索引插入, 指定索引并按顺序插入]

  UpdateTime--2017年12月6日16:10:19

  (二)初始化  

// 方式一:初始化list,当第一个元素添加后,容量大小将设为10List
list01 = new ArrayList
();// 方式二:初始化list并指定集合容量大小List list02 = new ArrayList(8); 

  说明:

    初始化的时候既可以指定集合初始容量大小也可以不指定,主要涉及的是内存的优化,以后需要再说;// TODO

    初始化的时候既可以对泛型进行控制也可以不做泛型控制,建议添加泛型控制;

    list集合的初始size为0,可容纳的元素数为1;

    可容纳的元素个数为[0,list.size],每增加一个元素,size就会+1,并且可容纳的元素个数会随着list.size的递增而递增;

    当现有容量无法承载时,容量会自动扩增,具体扩增多少,有待研究。// TODO

  (三)常用操作

    3.3.1 增

    UpdateTime--2017年9月5日08:48:02
    往List中插入数据有两种方式:
    方式一:
按顺序插入元素
    语法:
      list.add(element)
    举例:
List list = new ArrayList();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);
    方式二:
将元素插入到List中指定位置
    语法:
      list.add(index, element)
    用途:向集合中添加一个元素
    说明:
      
使用这种方式插入元素的条件:该元素下标已在集合中存在;
      
插入后造成的影响:在该索引的内容变更为强行插入的内容,并且原来在该元素下标的内容及排在该元素下标后面的内容的索引号+1;
    举例论证:
List
list = new ArrayList
();list.add("不指定索引插入");list.add(1,"指定索引并按顺序插入");// list.add(5,"指定索引但间隔插入");// 运行时会报错:java.lang.IndexOutOfBoundsException: Index: 5, Size: 2;// 因为超出了list的范围,此时list.size=2System.out.println(list.toString());// [不指定索引插入, 指定索引并按顺序插入]list.add(0,"指定索引并强行插入");System.out.println(list.toString());// [指定索引并强行插入, 不指定索引插入, 指定索引并按顺序插入

    往List中插入数据的第三种方式

    语法:

      list.putAll(list2)

    用途:将一个集合中的所有元素拷贝到另一个集合当中

// 代码片断一List
list = new ArrayList
();list.add("不指定索引插入");list.add(1,"指定索引并按顺序插入");list.add(0,"指定索引并强行插入");List
list2 = new ArrayList
();list2.add("将list中的元素全部复制给list2");// 将list中的元素全部复制给list2,返回Boolean类型结果,用于校验是否拷贝成功boolean isCopySuccess = list2.addAll(list);

    说明:

      putAll()方法将list集合中的所有元素都拷贝到了list2集合中,该方法实现了完全拷贝而不是像Map那样只是对对象的引用。

    举例论证:
// 接着上面的代码// 清除listlist.clear();// 打印listSystem.out.println("list中内容为:" + list.toString());// {}// 打印list2System.out.println("list2中内容为:" + list2.toString());// [将list中的元素全部复制给list2, 指定索引并强行插入, 不指定索引插入, 指定索引并按顺序插入]// 实验证明:list2中的内容并没有因为list中的内容清空而受到影响,即深层拷贝

    3.3.2 删     

    方式一:使用remove()
    语法:
      list.remove(index/element)
    用途:移除集合中一个指定的元素
    用法一:按元素下标(index)进行移除
// 接着代码片断一// 按元素下标进行移除list2.remove(0);System.out.println("移除list中的第一个元素后:" + list2.toString());// [不指定索引插入, 指定索引并按顺序插入, 将list中的元素全部复制给list2] 
    用法二:元素内容(element)进行移除
// 接着代码片断一list2.add("将list中的元素全部复制给list2");System.out.println(list2.toString());// [将list中的元素全部复制给list2, 指定索引并强行插入, 不指定索引插入, 指定索引并按顺序插入, 将list中的元素全部复制给list2]// 按集合元素所对应的内容进行移除,这种方式只能移除第一次匹配到的元素list2.remove("将list中的元素全部复制给list2");System.out.println(list2.toString());// [指定索引并强行插入, 不指定索引插入, 指定索引并按顺序插入, 将list中的元素全部复制给list2]

    说明:按元素内容进行移除,这种方式只会移除第一次匹配到的元素  

    方式二:使用clear()
    语法:
      list.clear()  
       用途:清除集合中的所有元素
// 接着代码片断一// 清除listlist.clear();// 判断list集合是否为空boolean isEmptyList = list.isEmpty();if (isEmptyList) {    System.out.println("list中内容为:" + list.toString());// {}} 
    3.3.3 改
    语法:
      list.set(index,content)
// 接着代码片断一// 修改指定元素下标对应的内容String updateMsg = list2.set(2, "");System.out.println("下标为2的元素之前所代表的内容是:" + updateMsg);// 不指定索引插入 
    3.3.4 取值
    语法:
      list.get(index)   
// 接着代码片断一// 获取指定元素下标所对应的内容String elementMsg = list2.get(2);System.out.println(elementMsg);// 不指定索引插入
    3.3.5 迭代集合
/** * 方法一:使用forEach遍历(推荐使用) * 类型、别名、数组名 */for (Object li:list) {    System.out.println(li);}
/** * 方法二:使用迭代器1 */Iterator it = list.iterator();while(it.hasNext()) {    System.out.println(it.next());}
/** * 方法三:使用迭代器方法2 */for (Iterator ite=list.iterator();ite.hasNext();) {    System.out.println(ite.next());}
/** *方法四: 使用for循环 */System.out.println("使用for循环遍历");for (int i=0;i

 

  (四)其他用法

    UpdateTime--2017年7月21日08:55:01

    3.4.1 非空判断

    UpdateTime--2017年7月26日16:52:42

    方法一:使用isEmpty()方法(推荐使用)

if (!list.isEmpty()) {  //对list进行操作  } 

    方法二:使用size()方法    

if (list.size() > 0) {    //对list进行操作}  

    如果集合为空,返回的是0。 

    UpdateTime--2018年1月29日11:31:37

    3.4.2 contains

    用途:用于判断集合中是否包含指定字符串(该元素是否已经存在)

    返回值:包含-TRUE,不包含-FALSE

  (五)格式转换

    3.5.1 List集合转换成json代码(List-->JSONArray)

List list = newArrayList();list.add( "first" );list.add( "second" );JSONArray jsonArray2 =JSONArray.fromObject( list );

    更多介绍请移步文章: 

    UpdateTime--2017年12月6日17:28:37

    共用代码

List
list2 = new ArrayList
();list2.add("不指定索引插入");list2.add("指定索引并按顺序插入");list2.add("");

    3.5.2 list转字符串(List-->String)

// list转字符串(List-->String)String listStr = list2.toString();System.out.println(listStr);// [不指定索引插入, 指定索引并按顺序插入, ]

    说明:

      转换后的字符串,两边分别包含的是"[]"

      格式:"[str1, str2, str3, ...]"

      进一步转换:去除[]

listStr.substring(1, listStr.length() - 1)

 

    3.5.3 list转数组(list-->array)

// list转数组(list-->array)// 方式一:这种方式只能用Object形式的[]接收,不能强制转换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));// [不指定索引插入, 指定索引并按顺序插入, ]

  

  (六)进一步封装

    UpdateTime--2017年5月31日17:42:03

    3.6.1 大集合拆分成小集合

/** * 拆分集合 * @param 
* @param resList * 要拆分的集合 * @param count * 每个集合的元素个数 * @return 返回拆分后的各个集合 */public static
List
> split(List
resList, int count) { if (resList == null || count < 1) return null; List
> ret = new ArrayList
>(); int size = resList.size(); if (size <= count) { // 数据量不足count指定的大小 ret.add(resList); } else { int pre = size / count; int last = size % count; // 前面pre个集合,每个大小都是count个元素 for (int i = 0; i < pre; i++) { List
itemList = new ArrayList
(); for (int j = 0; j < count; j++) { itemList.add(resList.get(i * count + j)); } ret.add(itemList); } // last的进行处理 if (last > 0) { List
itemList = new ArrayList
(); for (int i = 0; i < last; i++) { itemList.add(resList.get(pre * count + i)); } ret.add(itemList); } } return ret;}

   示例:见iBATIS文章中的批量插入

  // TODO 待研究:List泛型

 

  (七)功能实现 

 

 

转载地址:http://bzynx.baihongyu.com/

你可能感兴趣的文章
【BZOJ1179】[Apio2009]Atm (tarjan+SPFA)
查看>>
P1353 [USACO08JAN]跑步Running
查看>>
sqylog 50道练习题
查看>>
分布式ehcache缓存
查看>>
c#获取下载路径
查看>>
easyui 弹出框调用外部js函数 提示“Microsoft JScript 运行时错误: 缺少对象”
查看>>
html / css打印样式
查看>>
我的Java开发学习之旅------>Java使用ObjectOutputStream和ObjectInputStream序列号对象报java.io.EOFException异常的解决方法...
查看>>
spring boot打war包发布
查看>>
linux 平台core dump文件生成
查看>>
写在开园时
查看>>
sql处理百万级以上的数据提高查询速度的方法
查看>>
面向对象
查看>>
数据结构-字典
查看>>
Centos下MongoDB数据库的安装以及配置开机自启动(三)
查看>>
二进制基础&JAVA I/O输入输出流
查看>>
elasticsearch系列(四)部署
查看>>
Hacker(13)----搜集目标计算机的重要信息
查看>>
linux查看防火墙状态及开启关闭命令
查看>>
收纳集
查看>>