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,当第一个元素添加后,容量大小将设为10
List<String> list01 = new ArrayList<String>();
// 方式二:初始化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<Object> list = new ArrayList<Object>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);

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

list.add(0,"指定索引并强行插入");
System.out.println(list.toString());// [指定索引并强行插入, 不指定索引插入, 指定索引并按顺序插入

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

    语法:

      list.putAll(list2)

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

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

    说明:

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

    举例论证:

// 接着上面的代码
// 清除list
list.clear();
// 打印list
System.out.println("list中内容为:" + list.toString());// {}
// 打印list2
System.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()  
用途:清除集合中的所有元素
// 接着代码片断一
// 清除list
list.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<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循环*/
System.out.println("使用for循环遍历");
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()) {//对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 );

    更多介绍请移步文章: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转字符串(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 <T>* @param resList*            要拆分的集合* @param count*            每个集合的元素个数* @return 返回拆分后的各个集合*/
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) { // 数据量不足count指定的大小
        ret.add(resList);} else {int pre = size / count;int last = size % count;// 前面pre个集合,每个大小都是count个元素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的进行处理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;}

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

  // TODO 待研究:List泛型

  (七)功能实现

转载于:https://www.cnblogs.com/Marydon20170307/p/6906794.html

java List集合相关推荐

  1. java 数组集合转换_Java 实例 – 集合转数组

    Java 实例 - 集合转数组 以下实例演示了如何使用 Java Util 类的 list.add() 和 list.toArray() 方法将集合转为数组: /* author by w3cscho ...

  2. java icomparer_集合数据处理(C#、JavaScript 和 Java)

    Java 丢了好多年,最近在拣起来,首先当然是了解这么多年来它的变化,于是发现了 Java 8 的java.util.stream.在学习和试验的过程中,相比较于 C# 和 javascript,有那 ...

  3. java中集合的区别_Java中的集合与集合之间的区别

    Java收集框架用于操纵对象的收集.收集框架包含多个包装器类,便利类,用于传统实现的类,例如vector和Hashtable,收集接口等. 集合是Java集合框架中的接口.它分为两部分-Java ut ...

  4. Java面试集合(二)

    前言 大家好,给大家带来Java面试集合(二)的概述,希望你们喜欢 二 1.请问线程有哪些状态? 新建状态(New) 就绪状态(Runnable) 运行状态(Running) 阻塞状态(Blocked ...

  5. java中集合的排序

    java中集合的排序 import java.util.Set; import java.util.HashSet; import java.util.List; import java.util.A ...

  6. (7)Java数据结构--集合map,set,list详解

    MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...

  7. java各种集合的线程安全

    转载自  java各种集合的线程安全 线程安全 首先要明白线程的工作原理,jvm有一个main memory,而每个线程有自己的working  memory,一个线程对一个variable进行操作时 ...

  8. Java Map集合面试题汇总

    转载自 Java Map集合面试题汇总 1. 你都知道哪些常用的Map集合? 2.Collection集合接口和Map接口有什么关系? 3.HashMap是线程安全的吗?线程安全的Map都有哪些?性能 ...

  9. java 读取集合到流中_Java 10:将流收集到不可修改的集合中

    java 读取集合到流中 Java 10引入了几种新方法来促进不可修改集合的创建. List.copyOf , Set.copyOf和Map.copyOf方法从现有实例创建新的集合实例. 例如: Li ...

  10. java中集合选取怎么选_集合中的可选

    java中集合选取怎么选 有时有人认为Optional类型值得在集合中使用. 据称,它解决了以下问题: HashMap在没有键映射以及值null映射到键的情况下返回null . 如果使用Map< ...

最新文章

  1. 灰度图像直方图均衡化公式及实现
  2. ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API
  3. 赠票 | 互联网大厂的数据治理与资产管理实战 | DAMS 2020
  4. 转:c#委托事件实现窗体传值
  5. 函数式编程语言python-函数式编程语言
  6. 系统间通信1:阻塞与非阻塞式通信B
  7. jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档。
  8. [转]Android中dp,px,sp概念梳理以及如何做到屏幕适配
  9. lsass.exe文件丢失,损坏
  10. python使用telnet远程连接linux系统读取信息_Linux服务笔记之一:Telnet 远程登录
  11. 折线图x轴的日期会超出_matplotlib之折线图(代码+解析)
  12. mysqlbinlog相关
  13. 软件系统换服务器地址,软件系统换服务器地址
  14. python和pycharm版本要对应吗_pycharm的版本问题
  15. 云服务器上硬盘是虚拟的吗,虚拟硬盘映射在主机上使用
  16. 计算机系晚自习,计算机系晚自习学习计划.doc
  17. pyton 爬虫-图片
  18. Map Set,带你进入Java最常用到的两个接口 - 细节狂魔
  19. HTML文件命名_没有删不掉的文件:强制终止、一键解锁,样样精通
  20. html的国际标准智商测试,国际标准智商测试30题(含答案)

热门文章

  1. webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server
  2. mybatis like的用法
  3. 自定义控件之onMeasure
  4. 团队项目的分工及绩效评估方法
  5. 【IBM Tivoli Identity Manager 学习文档】13 Service管理
  6. 看视频笔记1【wpf】
  7. linux kernel 2.6.36 编译升级
  8. 第二次团队作业-需求分析
  9. Javascript编码规范,好的代码从书写规范开始,增强代码的可读性,可维护性,这是相当重要的!...
  10. Hibernate n+1问题