整个集合框架中最经常使用的就是List(列表)和Set(集)



一、List集合 && Set的特点

Collection的子接口:

1、List:有序(存入和取出的顺序一致),元素都有索引且能够反复

   API文档解释:有序的 collection(也称为序列)。此接口的用户能够对列表中每一个元素的插入位置进行精确地控制。用户能够依据元素的整数索引(在列表中的位置)訪问元素,并搜索列表中的元素。

2、Set:元素不能反复,无序,有可能会有序

   API文档解释:一个不包括反复元素的 collection。更确切地讲,set 不包括满足e1.equals(e2)
的元素对 e1e2,而且最多包括一个 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
类还为在列表的开头及结尾 getremoveinsert 元素提供了统一的命名方法。这些操作同意将链接列表用作堆栈、队列双端队列

JAVA学习第三十四课 (经常使用对象API)—List集合及其子类特点的更多相关文章

  1. JAVA学习第三十六课(经常使用对象API)— Set集合:HashSet集合演示

    随着Java学习的深入,感觉大一时搞了一年的ACM,简直是明智之举,Java里非常多数据结构.算法类的东西,理解起来就轻松多了 Set集合下有两大子类开发经常使用 HashSet集合 .TreeSet ...

  2. JAVA学习第五十四课 — IO流(八)打印流 & 序列流

    一.综合练习-文件清单列表 获取指定文件夹下,指定扩展名的文件(含子文件夹),并将这些文件的绝对路径写到一个文本文件里.也就是建立一个指定扩展名的文件列表 1.深度遍历 2.过滤器->容器 3. ...

  3. JAVA学习第三十二课(经常使用对象API)- 基本数据类型对象包装类

    将基本数据类型(8种:int..)封装成对象的优点就是能够在对象中封装很多其它的功能和方法来操控该数据 常见的操作就是:用于基本数据类型与字符串之间的转换 基本数据类型对象包装类一般用于基本类型和字符 ...

  4. JAVA学习第六十四课 — 反射机制

       Java反射机制是在执行状态中,对于随意一个类,都可以知道这个类的全部属性和方法,对于随意一个对象,都可以调用它的随意一个方法和属性,这样的动态获取的信息以及动态调用对象的方法的功能称为java ...

  5. 风炫安全web安全学习第三十四节课 文件包含漏洞防御

    风炫安全web安全学习第三十四节课 文件包含漏洞防御 文件包含防御 在功能设计上不要把文件包含的对应文件放到前台去操作 过滤各种../,https://, http:// 配置php.ini文件 al ...

  6. “全栈2019”Java多线程第三十四章:超时自动唤醒被等待的线程

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  7. 风炫安全WEB安全学习第三十八节课 越权漏洞演示与讲解

    风炫安全WEB安全学习第三十八节课 越权漏洞演示与讲解 越权漏洞 0x01 漏洞介绍 越权漏洞的危害与影响主要是与对应业务的重要性相关,比如说某一页面服务器端响应(不局限于页面返回的信息,有时信息在响 ...

  8. 风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击

    风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击 文件包含漏洞 参考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/ 分类 ...

  9. NeHe OpenGL教程 第三十四课:地形

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

随机推荐

  1. 移动端 transition动画函数的封装(仿Zepto)以及 requestAnimationFrame动画函数封装(仿jQuery)

    移动端 css3 transition 动画 ,requestAnimationFrame 动画  对于性能的要求,h5优先考虑: 移动端 单页有时候 制作只用到简单的css3动画即可,我们封装一下, ...

  2. HTML5 transform三维立方体(随着旋转的效果)

    为了得到更好的把握transform精华.因此,我们决定完成三维立方体模型,可以实现360无死三维旋转作用. 但旋转更难推断每侧视图的序列.然而,完美的解决方案,我希望有人能回答. 源代码直接贡献的朋 ...

  3. HTTP状态管理机制之Cookie(转)

    一.cookie 起源 cookie 最早是网景公司的雇员 Lou Montulli 在1993年3月发明,后被 W3C 采纳,目前 cookie 已经成为标准,所有的主流浏览器如 IE.Chrome ...

  4. [Python]sqlite3二进制文件存储问题(BLOB)(You must not use 8-bit bytestrings unless you use a text_factory...)

    事情是这种: 博主尝试用Python的sqlite3数据库存放加密后的usernamepassword信息,表是这种 CREATE TABLE IF NOT EXISTS user ( userID ...

  5. HDU1160(LIS)

    主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 题意:求体重下降.速度添加的样例最多有多少个 依据体重降序排一下,然后求速度的最长上升子序列 , ...

  6. 《Effective C++》:规定44-规定45

    规定44分离的不依赖参数代码templates 条款45运用成员函数模板接受全部兼容类型 Templates和泛型编程 条款44:将与參数无关的代码抽离templates Templates能够节省时 ...

  7. ThreadLocal的内存泄露(转)

    ThreadLocal的目的就是为每一个使用ThreadLocal的线程都提供一个值,让该值和使用它的线程绑定,当然每一个线程都可以独立地改变它绑定的值.如果需要隔离多个线程之间的共享冲突,可以使用T ...

  8. jdk和cglib简单理解(转)

    之前使用cglib的时候不需要将classLoader作为参数传入,但动态代理却要,带着这个疑惑进入这个方法: Proxy.newProxyInstance(classLoader, interfac ...

  9. 【甘道夫】官方网站MapReduce代码注释具体实例

    引言 1.本文不描写叙述MapReduce入门知识,这类知识网上非常多.请自行查阅 2.本文的实例代码来自官网 http://hadoop.apache.org/docs/current/hadoop ...

  10. 最新Oracle 和 mysql 的对比参照----开发篇(转)

    Oracle mysql 对比版本 Release 10.2.0.1.0 XE  windowsXP 5.0.45-community-nt-log MySQL Community Edition ( ...