集合:用于存储对象的容器。集合中可以存储任意类型的对象,长度可变。

集合和数组的比较

  1. 集合和数组都是存储对象的容器,不同的是,数组可以存储基本数据类型(int、short、long、char、Boolean、double、float、byte),集合只能存储任意类型的对象。
  2. 数组长度是固定的,集合的长度是可变的(根据加载因子和扩容增量来完成扩容)。

数组操作复杂,在java中可用方法少,集合操作简单,有很多操作方法。

对于集合,顶层都实现了Iterable接口,表明集合都是可迭代的,可以视同iterable()方法获取集合对于的迭代器,也可以使用增强的for循环进行迭代。

1、Collection:collection为所以集合的定级接口,继承了Iterable类,表明所有集合类都是可迭代的。

2、List: 实现了Collection接口,存储的数据是有序的、可重复的,可通过索引进行元素访问。

3、ArrayList:底层实现为数组,线程不安全,查找效率高,增删效率低。

4、Vector:由下图可知vector和ArrayList实现原理相同,但是vector是线程安全的(synchronized),效率略低于ArrayList。

5、Stack:继承Vector,是一个先进后出的栈。

6、LinkedList:底层实现为双向链表,进行元素的增删效率高,查询效率低。

7、Queue:队列,先进先出(FIFO)

8、Set:存储的元素是无序的、唯一的。在程序运行中,如果使用add添加一个已经存在的元素,将返回false。

9、HashSet:底层实现为哈希表(链表+数组),线程不安全,查找效率高,增删效率低,通过元素的hashCode和equels方法保证了元素的唯一性。

上图为HashSet底层实现模式哈希表(数组+链表),当一条链上元素超过8个以上后,会自动转换为红黑树来存储元素,提高查询效率。

11、TreeSet:底层实现为二叉树,线程不安全,可对元素进行自动排序,保证元素唯一性的方式是compareTo方法返回0。

12、LinkedHashSet:底层实现为链表和哈希表,线程不安全,存储的元素时有序的、唯一的,通过元素的hashCode和equels方法保证了元素的唯一性。

Arrays:类Arrays为集合的工具类,可使用该类的方法对集合进行排序、转换为list等操作。

Collections:为所有直接或间接实现了Collection接口的集合类的工具类,该类封装了对集合的各种操作,如排序、反转、替换等操作。

最新文章

  1. [译]Godot系列教程五 - 制作Godot编辑器插件
  2. HaProxy配置
  3. 使用Json.NET来序列化所需的数据
  4. 如何通过CSS3 实现响应式Web设计
  5. 刨根问底拦不住——I/O模型
  6. Android背景渐变色效果
  7. android 欢迎界面的淡入效果
  8. HDU 5166 Missing number 简单数论
  9. 列存储段消除(ColumnStore Segment Elimination)
  10. 使用jQuery动态克隆表格,并且添加至div中(使用前需要引入jQuery)
  11. [冷知识] 连字符-减号-横杠的区别 difference between hyphen-minus-dash
  12. Servlet第二篇(介绍、ServletConfig;ServletContext)
  13. ZooKeeper和CAP理论及一致性原则
  14. Mac挂载虚拟机的共享文件夹
  15. Regsvr32 在64位机器上的用法(转载)
  16. win10系统下我的电脑右键没有属性
  17. js解决弹窗问题实现班级跳转DIV示例
  18. WPF 新手引导
  19. UML建模—EA创建Class(类图)
  20. wchar与char字符转换的探究

热门文章

  1. 打开centos直接进入文本模式命令行
  2. SAP CRM调查问卷的评分和图表显示功能介绍
  3. 【整理】iview中刷新页面的时候更新导航菜单的active-name
  4. Python基础3 函数 变量 递归 -DAY3
  5. C++内联函数的使用
  6. 错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use: JVM_Bind
  7. 第1节 flume:10、flume的更多组件介绍
  8. iOS之绘制像素到屏幕
  9. Global Round 2
  10. HTML5增加与改良的input元素