JAVA学习第三十四课 (经常使用对象API)—List集合及其子类特点
整个集合框架中最经常使用的就是List(列表)和Set(集)
一、List集合 && Set的特点
Collection的子接口:
1、List:有序(存入和取出的顺序一致),元素都有索引且能够反复
API文档解释:有序的 collection(也称为序列)。此接口的用户能够对列表中每一个元素的插入位置进行精确地控制。用户能够依据元素的整数索引(在列表中的位置)訪问元素,并搜索列表中的元素。
2、Set:元素不能反复,无序,有可能会有序
API文档解释:一个不包括反复元素的 collection。更确切地讲,set 不包括满足e1.equals(e2)
的元素对 e1 和 e2,而且最多包括一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的set 抽象。
....
依据问题须要使用相应的容器
二、List常见方法
由于是Collection的子类,仅仅演示其特有方法
1.加入
void add(index,element)
void add(index,Collection)
2.删除
Object remove(index)
3.改动
Object set(index,element)
4.获取
Object get(index)
int indexOf(Object)
int lastIndexOf(Object)
List subList(from,to)//含头,不含尾
代码演示
import java.util.ArrayList;
import java.util.List; public class Main
{
public static void main(String[] args)
{
List list = new ArrayList();//注意LIst的包不要导入错误,java.awt中也有个List
show(list);
}
public static void show(List list)
{
//加入
list.add("a1");
list.add("a2");
list.add("a3");
System.out.println("List = "+list); //加入元素
//list.add(2,"a250"); //删除元素
//list.remove(2); //改动(Collection不具备改动)
//list.set(2, "a25"); //获取
//list.get(1);
//System.out.println("list = "+list.get(1)); //获取子列表
List LL = list.subList(0, 2);//含头,不含尾
System.out.println("ZI List = "+LL); }
}
由上可见,List的特有的常见方法有一个共性就是都能够操作角标->增删改查
三、ListIterator接口:List特有
API文档解释:系列表迭代器,同意程序猿按任一方向遍历列表、迭代期间改动列表,并获得迭代器在列表中的当前位置。
ListIterator迭代器,是为了处理迭代器迭代和集合操作出现并发改动时,出现的异常问题
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator; public class Main
{
public static void main(String[] args)
{
List list = new ArrayList();
//show(list);
ListIteratorDemo(list);
}
public static void ListIteratorDemo(List list)
{
list.add("a1");
list.add("a2");
list.add("a3"); //Iterator it = list.iterator();//此时的it仅仅知道当前状态的list的内部数据结构的存储方式
//所下面述代码会抛出异常,由于后来list结构变化了,it不知道
/*while(it.hasNext()) {
Object object = it.next();
if (object.equals("a2")) {
list.add("a250");//ConcurrentModificationException
//此异常的原因是:当方法检測到对象的并发改动,但不同意这样的改动时,抛出此异常。
}
else {
System.out.println(object);
}
}*/ //解决:迭代和集合同一时候訪问造成了并发,所以集合操作的时候不迭代,迭代的时候不使用集合操作
System.out.println("Old List :"+list);
ListIterator iterator = list.listIterator();
//list特有迭代器,能够实如今迭代过程中完毕对元素的增删改查
/*listIterator(int index)
返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置開始。*/
while (iterator.hasNext()) {
Object object = iterator.next();
if(object.equals("a2")){
iterator.add("a250");//注意此处就不用list,而是使用的迭代器,避免并发
}
}
System.out.println("New List:"+list);
//System.out.println("hasNext? "+iterator.hasNext());
//System.out.println("hasPrevious? "+iterator.hasPrevious());
while(iterator.hasPrevious())
{
System.out.println(iterator.previous());
}
}
}
四、List经常使用子类特点
1.Vector:内部是数组结构,且同步,增删慢,查询慢
API文档解释:Vector 类能够实现可增长的对象数组。与数组一样,它包括能够使用整数索引进行訪问的组件。可是,Vector 的大小能够依据须要增大或缩小,以适应创建Vector 后进行加入或移除项的操作。
2.ArrayList:内部是数组结构,不同步替代了Vector,查询速度快
API文档解释:List 接口的大小可变数组的实现。实现了全部可选列表操作,并同意包含null 在内的全部元素。除了实现List
接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于Vector 类,除了此类是不同步的。)
3.LinkedList:内部是链式存储结构,不同步,增删速度快
API文档解释:List 接口的链接列表实现。实现全部可选的列表操作,而且同意全部元素(包含null)。除了实现List 接口外,LinkedList
类还为在列表的开头及结尾 get、remove 和insert 元素提供了统一的命名方法。这些操作同意将链接列表用作堆栈、队列或双端队列。
JAVA学习第三十四课 (经常使用对象API)—List集合及其子类特点的更多相关文章
- JAVA学习第三十六课(经常使用对象API)— Set集合:HashSet集合演示
随着Java学习的深入,感觉大一时搞了一年的ACM,简直是明智之举,Java里非常多数据结构.算法类的东西,理解起来就轻松多了 Set集合下有两大子类开发经常使用 HashSet集合 .TreeSet ...
- JAVA学习第五十四课 — IO流(八)打印流 & 序列流
一.综合练习-文件清单列表 获取指定文件夹下,指定扩展名的文件(含子文件夹),并将这些文件的绝对路径写到一个文本文件里.也就是建立一个指定扩展名的文件列表 1.深度遍历 2.过滤器->容器 3. ...
- JAVA学习第三十二课(经常使用对象API)- 基本数据类型对象包装类
将基本数据类型(8种:int..)封装成对象的优点就是能够在对象中封装很多其它的功能和方法来操控该数据 常见的操作就是:用于基本数据类型与字符串之间的转换 基本数据类型对象包装类一般用于基本类型和字符 ...
- JAVA学习第六十四课 — 反射机制
Java反射机制是在执行状态中,对于随意一个类,都可以知道这个类的全部属性和方法,对于随意一个对象,都可以调用它的随意一个方法和属性,这样的动态获取的信息以及动态调用对象的方法的功能称为java ...
- 风炫安全web安全学习第三十四节课 文件包含漏洞防御
风炫安全web安全学习第三十四节课 文件包含漏洞防御 文件包含防御 在功能设计上不要把文件包含的对应文件放到前台去操作 过滤各种../,https://, http:// 配置php.ini文件 al ...
- “全栈2019”Java多线程第三十四章:超时自动唤醒被等待的线程
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- 风炫安全WEB安全学习第三十八节课 越权漏洞演示与讲解
风炫安全WEB安全学习第三十八节课 越权漏洞演示与讲解 越权漏洞 0x01 漏洞介绍 越权漏洞的危害与影响主要是与对应业务的重要性相关,比如说某一页面服务器端响应(不局限于页面返回的信息,有时信息在响 ...
- 风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击
风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击 文件包含漏洞 参考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/ 分类 ...
- NeHe OpenGL教程 第三十四课:地形
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
随机推荐
- Android学习路径(七)建立Action Bar
在action bar最今本的形式中,它只在左边展示了activity的标题以及应用的icon. 即使在这样的简单的形式中,它也不过告诉用户如今在应用的哪个activity中,同一时候为你的应用保持一 ...
- hdu4888 Redraw Beautiful Drawings
14更多学校的第二个问题 网络流量 分别以行,列作为结点建图 i行表示的结点到j列表示的结点的流量便是(i, j)的值 跑遍最大流 若满流了便是有解 推断是否unique 就是在残余网络 ...
- OpenGL中shader使用
学了接近一个月的OpenGL,最终要排上用场了...好吧,就从学到的shader(着色器)开刀吧. 先简单的介绍shader,shader事实上是显卡的功能,就是利用显卡的GPU去做图像处理的工作,而 ...
- 我学的是设计模式的视频教程——辛格尔顿,生成器VS工厂方法
课程视频 单例模式 建造者VS工厂方法 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 版权声明:本文博客原创文章,博客, ...
- 关闭 MsMpEng.exe
MsMpEng.exe是Windows Defender 自动保护服务的核心引擎. 系统是win8.1 最近发现MsMpEng.exe是任务管理器里面最占内存的一个程序,且无法强制结束程序.偶然发现一 ...
- Struts1项目转成Struts2项目步奏
注意:要转成Struts2必须struts2配置和流程理解,我不知道,我只能说还是知道struts2然后转成struts2对. 1.先备份一份.不要没转成功项目搞蹦了都回不来了. 2.导入Struts ...
- C# DateTime结构的常用方法
在项目开发中,经常会碰到日期处理.比如查询中,可能会经常遇到按时间段查询,有时会默认取出一个月的数据.当我们提交数据时,会需要记录当前日期,等等.下面就看看一些常用的方法. 首先,DateTime是一 ...
- 【LeetCode从零单排】No189 .Rotate Array
称号 Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the arr ...
- High Performance Browser Networking - TCP UDP TLS
延迟 定义和标准延迟 延迟简单地说,它是一种转移或信息包从起点到终点,所花费的时间. 延迟=发送延迟+传播延迟+处理延迟+排队延迟: Propagation delay 传播时延 传播时延这个概念.是 ...
- Linux 编程学习笔记----文档管理系统
本文从网络上完成的第 Linux在文件系统管理. 1.VFS文件系统概述 linux採用VFS来管理文件系统,并且linux设计的原则之中的一个就是everything is file.因此文件管理系 ...