jdk 1.5后collection 不再是集合的顶层接口了,而是Iterable 实现这个接口是为了允许集合对象成为增强for 的目标 |
集合是专业存储对象的容器 ,注意集合仅仅存储的是对象的引用,而非对象本身。 |
List 继承继承了Collection 接口. List 是Collection 的子类. List 更强的,具备更多个方法.. |
list提供了一些特殊方法实现自己的特有功能,都依赖于角标 |
集合的特点 元素存储有序,在list集合中的元素都有角标,且可以存储重复值 |
增 void add(int index, Object element) boolean addAll(int index, Collection c) |
删 remove(int index) |
查 get(int index) int indexOf(Object o) int lastIndexOf(Object o) |
改 Object set(int index, Object element) subList(int fromIndex, int toIndex) |
List实现类 |
特点: 底层是数组实现, 数组是一块连续的内存,通过角标可以实现快速的定位,查找很快. 但是增加和删除元素时,很慢, 元素的移动(增加和删除),和数组的扩容(增加元素,数组空间不足) 底层的数组的扩容,是以1.5倍扩容的... 总结: 查找快,增删慢. 在实际开发中,最为常见的一个集合... |
总结: 查找快,增删慢. |
ArrayList 集合: contains方法底层使用元素的equals方法 以使用contains 检测集合中是否包含指定的元素. 但是如果元素是自定义对象话, contains 底层使用的元素的equals 方法进行检测的. 如果自定义对象没有重写equals, contains 方法不能正常工作了. |
List 实现类 |
双向链表结构的集合 |
特点: 双向链表实现. 集合的每增加一个元素,创建出一个节点(Node)对象保存一个元素. 上一个节点会记录下一个节点的引用. 由于双向链表,下一个节点也会记录上一个节点的. 节点和节点的内存地址不连续, 查找很慢,增删快了.. |
注意: LinkedList 和数组没有任何关系. |
提供了一些特有的功能(由于双向链表的列表,操作集合的头尾就很方便) |
addFirst addLast getFirst getLast removeFirst removeLast |
栈:stack 队列 queue 先进后出,后进先出... 先进先出. 压栈 排队 : offer push() 出队 :poll 弹栈. pop() |
Vector 缺陷: JDK1.0 出现的. 具备自己特有方法,但是方法名太长. 底层也是数组实现, 数组在扩容是100% 扩容, 消耗内存.. 该集合是同步(集合的方法都是同步方法),在单线程在操作新低. 解决: JDK1.2 Java 设计了集合体系. Collection. 并设计出了ArrayList . Vector 就被ArrayList 替代了. ArrayList 优点: 方法名短. 虽然也是数组实现,但是扩容不再是100% 集合被设计为非同步的. 不再使用同步方法了. -> 提高性能. 注意: 如果ArrayList 遇到了多线程安全问题: 可以使用Collections.synchronizedList(List list); 将不同步的ArrayList 转换为同步的集合. |
List集合总结
最新推荐文章于 2023-06-14 10:34:27 发布