java集合之List

来源:互联网 发布:新闻类网站 数据库 编辑:程序博客网 时间:2024/05/22 12:57


集合:是一个容器,用来存储数据。
数据库:可掉电的,可以永久存储数据
数组:也可以存储数据

接口: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链表:增删快,查询慢

0 0
原创粉丝点击