您的位置:首页 > 编程语言 > Java开发

java集合之List

2016-08-19 23:31 369 查看



集合:是一个容器,用来存储数据。

数据库:可掉电的,可以永久存储数据

数组:也可以存储数据

接口:Collection --- 子接口:List和Set

  

  List:保证顺序,可根据索引获取元素,可重复。

  Set: 不保证顺序,不可重复。

接口List的实现类:ArrayList,LinkedList,Vector

接口Set的实现类:HashSet,TreeSet

Coolection:单列集合

List:元素有序,可以重复

Set:元素无序,不可以重复

集合的使用:

1.创建集合

2.操作集合 -- 增删改查

ArrayList集合:

  1.实现了List接口

  2.底层存储是以数组存储的,数组长度可变 -- 查询快,增删慢

  3.可以存储null值,并可重复

  4.取出顺序与添加顺序一致

  5.不是同步的

  

  增删改查方法

  集合的遍历方法:

  1.高级for循环

  2.使用迭代器, 模板代码:(迭代器是一种设计模式)

  //1.获取迭代器

  Iterator it = list.iterator();

  //2.遍历迭代器

  while(it.hasNext()){

    //取出元素

    System.out.println(it.next()+" | ");

  }

LinkedList集合:(在set集合中可以使用的方法在LinkedList中全都可以使用)

1.实现了List接口

2.存储结构是链表 --- 增删快,查询慢

3.也可重复存储null值

4.输出顺序与存储顺序一致

5.可作为堆栈(先进后出),队列(先进先出),双端队列(一边进两边出)

6.不是同步的

ArrayList和LinkedList的区别:在LinkedList中提供了一些列方法用来模拟堆栈,队列,双端队列,

                             而这些方法在ArrayList中没有提供。

例如使用LinkedList集合来模拟堆栈:

1.使用add方法为集合添加完元素之后

2.调用该集合特有的pollLast()方法来操作集合中的元素,该方法表示获取并移除集合中的最后一个元素。

  模拟队列:使用pollFirst()方法。

  模拟双端队列:同时使用pollFirst()和pollLast()方法。

--------------------------------------------------------------------

ArrayList和LinkedList的比较:

共同点:

     1.数据存储基于索引,表现为都可以通过调用get(index)方法获取指定索引位置的元素。

     2.都不是同步的,即多线程时存在安全隐患

     3.取出的顺序和存入的顺序一致

     4.对集合进行增删改查时调用的方法基本是一样的

不同点:

     1.数据的存储结构不同,ArrayList是数组存储,LinkedList是链表存储

     2.LinkedList可以用来模拟堆栈,队列,以及双端队列,主要是因为LinkedList比ArrayList多提供了这些模拟的方法。

     3.构造方法上的不同,ArrayList在创建时可以指定底层数组的长度,例如下:

       List list = new ArrayList(100);//指定数组长度为100

       List list = new ArrayList();//如果不指明,通过查看源码发现默认长度为10

---------------------------------------------------------------------------------------

扩展:

1.ArrayList集合的底层实现是数组,数组长度一经创建是不可变的,但是ArrayList的数组长度是可变的,

  当元素添加到要超出数组的长度时,就会重新生成一个新数组,将原数组的数据放进来,再将新数据放进新数组,

  此时元素组就会被系统回收,新数组的长度是原来的1.5倍长,每次新生成数组都是原来的1.5倍长,

  即ArrayList集合数组的可变是通过生成新数组来实现的。

2.LinkedList底层存储是链表,LinkedList集合中每一个元素都被封装为了一个Node对象(查看源码发现这个对象是使

  用内部类Node来实现的),并且每个Node对象分别持有上一个和下一个对象的引用,对象与对象之间就是通过该

  引用彼此相互连接。

----------------------------------------------------------------------------------------

两者使用时的选择:

 ArrayList数组:查询快,增删慢

LinkedList链表:增删快,查询慢

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 集合 List集合