List集合是一个元素有序可以重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复集合,前面博客写到Set不允许有重复集合。List集合可以通过索引来访问指定位置的集合元素。

List实现了Collection接口,故可以使用Collection接口的所有方法。而且由于List是有序集合,List可以根据索引来操作集合元素的方法。这些方法我们在平时使用list的会经常用到,比如:add(),addAll(),remove(),set()等方法,当然对于List去除重复,我们也可以使用remove()方法,另外Java8 还提供了sort(Comparator c)方法进行排序,根据Comparator参数对于List集合的元素排序。

List实现类:

(一)ArrayList类:

ArrayList是常用的List实现类,封装了一个动态的,允许再分配的Object[]数组。由于使用的是数组,所以每个元素之间不能有间隔。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除,允许空元素。

ArrayList是线程不安全的,当多个线程访问同一个ArrayList集合时,如果超过一个线程改变ArrayList集合的值时,程序员必须通过手动保证集合的同步性。

(二)Vector集合

Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费。使用Vector可以保证线程安全,但保证了安全,性能相对于ArrayList要低一些。

(三)LinkedList集合

由于存在链表,是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢,由于接口中没有定义的方法get,remove,insertList,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。

总结:

这三个类是List的最主要的实现类,在不同的场景下有不同的应用,但我们平时使用最多的是ArrayList,虽然ArrayList不是线程安全的,但后面可以用一个Collections的工具类,它可以将一个ArrayList编程线程安全的。

最新文章

  1. [CC]DgmOctree—执行Cell遍历和单元计算
  2. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(二)
  3. 【转】MYSQL入门学习之八:数据库及表的基本操作
  4. threadlocal精髓是为每一个线程保证一个共享对象,保证一个,保证是同一个
  5. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 总体介绍
  6. bzoj1863
  7. maven第7章生命周期和插件
  8. CentOS 7 破解root密码
  9. canvas-8searchLight2.html
  10. GCC卡常
  11. mac出现zsh: command not found: ping解决方法
  12. Fiddler抓包使用教程-模拟低速网络环境
  13. 如何将自己的Image镜像Push到Docker Hub
  14. 《DSP using MATLAB》Problem 5.34
  15. 黄聪:HBuilder左侧项目管理器如何不与标签页一起自动切换
  16. CentOS 6.5 伪分布安装
  17. GoldenGate的监控
  18. 2018ICPC网络赛(徐州站)A题题解
  19. UML中的6大关系(关联、依赖、聚合、组合、泛化、实现)
  20. Windows中将javac和java两个命令集成到UltraEdit工具栏

热门文章

  1. 【视频版】PDF合并器破解视频教程
  2. flask,scrapy,django信号
  3. 十、Spring的@Profile注解
  4. SpringMVC的基本概念
  5. vm采用NAT方式连接时,设置静态ip
  6. 备份数据库中的某个表的数据报错Statement violates GTID consistency
  7. tcpdump网络调试
  8. STM32中的几个时钟SysTick、FCLK、SYSCLK、HCLK
  9. hdu 1022 Train Problem I【模拟出入栈】
  10. python网课自动刷课程序-------selenium+chromedriver