• List

List:有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。

常用方法:

List中的一些特有方法测试:

    public void demo2()
{
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("!"); //在指定位置进行添加
list.add(1, "my");
// list.add(12,"错误") 会发生数组的越界 //删除指定位置的值
list.remove(1); //修改指定位置的值
list.set(1, "test"); System.out.println(list);
}

List的特有遍历方法:

    public void demo2()
{
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("!"); //List的特有遍历功能
for(int i=0;i<list.size();++i)
{
System.out.println(list.get(i));
}
}

List的特有迭代器ListIterator:该迭代器继承了Iterator接口

常用方法:

ListIterator中还提供了逆向遍历,不过需要先正向遍历之后才可以逆向,所以没有意义。一般不使用。

//报错代码
public void demo3()
{
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("!"); Iterator it = list.iterator();
while(it.hasNext())
{
String s = (String) it.next();
if("world".equals(s)) list.add("java");
}
}

这样写的话,会报ConcurrentModificationException的错误,也就是当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

产生的原因是:迭代器是依赖于集合而存在的,在判断成功后,集合中新添加了元素但是迭代器却是不知道的,所以会报错。

         或者说通过迭代器遍历元素的时候,是不能通过集合修改元素的。

解决方法:迭代器迭代元素,迭代器修改元素(需要使用ListIterator);

     集合遍历元素,集合修改元素(for+get);

    public void demo3()
{
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("!"); ListIterator it = list.listIterator();
while(it.hasNext())
{
String s = (String) it.next();
if("world".equals(s)) it.add("java");
}
System.out.println(list);
}

这里的添加是添加在刚才迭代的元素后面。

  • List的三个子类

1、ArrayList:底层数据结构是数组,查询块,增删慢。

            线程不安全,效率高。

2、Vector:底层数据结构是数组,查询块,增删慢。

             线程安全,效率低。

3、LinkedList:底层数据结构是双向链表,查询慢,增删块。

               线程不安全,效率高。

~ ArrayList

List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。

注意,此实现不是同步的。如果多个线程同时访问一个 ArrayList 实例,而其中至少一个线程从结构上修改了列表,那么它必须 保持外部同步。

*构造方法

*常用方法

~ Vector(基本不用了)

Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。另外,Vector是线程安全的。

*构造方法

*常用方法

    public void demo4()
{
Vector v = new Vector(); v.addElement("Hello");
v.addElement("World");
v.addElement("!"); //遍历
for(int i=0;i<v.size();++i)
{
String s = (String) v.elementAt(i);
System.out.println(s);
} System.out.println("---------------"); Enumeration en= v.elements();
while(en.hasMoreElements())
{
System.out.println(en.nextElement());
}
}

 ~ LinkedList

List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 getremoveinsert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。

此类实现 Deque 接口,为 addpoll 提供先进先出队列操作,以及其他堆栈和双端队列操作。注意,此实现不是同步的。如果多个线程同时访问一个链接列表,而其中至少一个线程从结构上修改了该列表,则它必须 保持外部同步。

*构造方法

*常用方法

由于有addfirst,addlast方法,getfirst,getlast方法,所以可以用来做为双端队列。并且有pop,push方法,所以可以用来作为堆栈。

Java 集合-List接口和三个子类实现的更多相关文章

  1. Java 集合-Map接口和三个子类实现

    2017-10-31 22:05:59 Map 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. HashMap是基于散列表实现的,插入.删除和定位元素时间复杂度平均能达到O ...

  2. Java 集合-Set接口和三个子类实现

    2017-10-31 19:20:45 Set 一个不包含重复元素的 collection.无序且唯一. HashSet LinkedHashSet TreeSet HashSet是使用哈希表(has ...

  3. Java集合Map接口与Map.Entry学习

    Java集合Map接口与Map.Entry学习 Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs).该接口描述了从不重复的键到值的映射. (1) ...

  4. java集合类型接口和实现类个人总结

    转载:http://blog.csdn.net/qingchunbusanchang/article/details/39576749 java的集合是一个比较综合的概念,相关的知识有很多的博客里面做 ...

  5. JAVA集合--Collection接口

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     在概述里面也说过:Collection是jav ...

  6. JAVA集合--Iterator接口

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     上一篇文章中我在集合元素的遍历中已经有涉及到I ...

  7. Java集合——Set接口

    1.定义 set中不允许放入重复的元素(元素相同时只取一个),使用equals()方法进行比较.如果返回true,两个对象的HashCode值也应该相等 2.方法 add():添加元素 remove( ...

  8. Java集合-07Map接口及其抽象类

    简介 前面把List基本记录完了,对于集合List,Map,Set,因为Set基于Map,故先记录Map. 这一篇主要记录Map接口及其抽象类(java version:1.8) 整体架构 参考上图, ...

  9. java集合——Collection接口

    Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...

随机推荐

  1. SQL查询遍历数据方法一 [ 临时表 + While循环]

    以下以SQL Server 2000中的NorthWind数据库中的Customers表为例, 用 临时表 + While循环 的方法, 对Customers表中的CompanyName列进行遍历 c ...

  2. EPD的驱动

    整个e-ink技术的生产流程:1997年从MIT媒体实验室走出来的E-INK公司成立并专注于研发具有良好阅读体验的电子纸.其中最著名的产品就是Vizplex 电子墨水.E-INK提供电子墨水给Pane ...

  3. linux常用命令:/etc/group文件详解

    Linux /etc/group文件与/etc/passwd和/etc/shadow文件都是有关于系统管理员对用户和 用户组管理时相关的文件.linux /etc/group文件是有关于系统管理员对用 ...

  4. layer常用方法代码

    layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. 在与同类组件的比较中,layer总是能轻易获胜.她尽可能 ...

  5. thinkphp相关

    thinkphp相关1.thinkphp调试sql方法:echo M("table_name")->getLastSql(); 2. 条件查询设置多个条件参数的写法:(1). ...

  6. c++ 11开始语言本身和标准库支持并发编程

    c++ 11开始语言本身和标准库支持并发编程,意味着真正要到编译器从语言和标准库层面开始稳定,估计得到17标准出来.14稳定之后的事情了,根据历史经验,新特性的引入到稳定被广泛采用至少要一个大版本的跨 ...

  7. 【翻译】std::remove - C++ Reference

    函数模板 std::remove 头文件<algorithm> template <class ForwardIterator, class T> ForwardIterato ...

  8. 20165310 Java实验五《网络编程与安全》

    20165310 Java实验五<网络编程与安全> 任务一 题目:①编写MyBC.java实现中缀表达式转后缀表达式的功能:②编写MyDC.java实现从上面功能中获取的表达式中实现后缀表 ...

  9. CP2102

    1概述 CP2102其集成度高,内置USB2.0全速功能控制器.USB收发器.晶体振荡器.EEPROM及异步串行数据总线(UART),支持调制解调器全功能信号,无需任何外部的USB器件.CP2102与 ...

  10. SPOJ Prime or Not - 快速乘 - 快速幂

    Given the number, you are to answer the question: "Is it prime?" Solutions to this problem ...