Skip to content

Latest commit

 

History

History
258 lines (217 loc) · 22.4 KB

集合.md

File metadata and controls

258 lines (217 loc) · 22.4 KB

Java集合架构由几个相关的组件构成: 接口 抽象类以及完全定义的类,其中, 每个完全定义的类继承了一个或多个抽象类,并实现了一个或多个接口

容器能否完全替代数组: 针对数组类型,很多语言都提供了容器类,比如Java中的ArrayList,在项目开发中,什么时候适合用数组,什么时候适合用容器呢?ArrayList最大的优势就是可以将很多数组操作的细节封装起来。比如前面提到的数组插入、删除数据时需要搬移其他数据等。另外,它还有一个优势,就是支持动态扩容。数组本身在定义的时候需要预先指定大小,因为需要分配连续的内存空间,如果使用ArrayList,我们就完全不需要关心底层的扩容逻辑,ArrayList已经帮我们实现好了。每次存储空间不够的时候,它都会将空间自动扩容为1.5倍大小,不过,这里需要注意一点,因为扩容操作涉及内存申请和数据搬移,是比较耗时的。所以,如果事先能确定需要存储的数据大小,最好在创建ArrayList的时候事先指定数据大小。是不是数组就无用武之地了呢?当然不是,有些时候,用数组会更合适些,我总结了几点自己的经验: 1.Java ArrayList无法存储基本类型,比如int、long,需要封装为Integer、Long类,而Autoboxing、Unboxing则有一定的性能消耗,所以如果特别关注性能,或者希 望使用基本类型,就可以选用数组。 2.如果数据大小事先已知,并且对数据的操作非常简单,用不到ArrayList提供的大部分方法,也可以直接使用数组。 3.还有一个是我个人的喜好,当要表示多维数组时,用数组往往会更加直观。比如Object[][] array;而用容器的话则需要这样定义:ArrayList array。对于业务开发,直接使用容器就足够了,省时省力。毕竟损耗一丢丢性能,完全不会影响到系统整体的性能。但如果你是做一些非常底层的开发,比如开发网络框架,性能的优化需要做到极致,这个时候数组就会优于容器,成为首选。

目录

一次性就让我搞懂了Java集合,建议收藏起来!
Java 集合框架详解---非常好 Java Collections Tutorial sample Learn Java Collections with Examples
Learn Java Collections with Examples Java Collections Framework
JAVA集合类型详解 Java集合与继承树 Java中的静态数组与动态数组
Java 集合框架 面试江湖:一招破解 Java 集合类面试题

Java 数据结构---以下这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection)

Collection接口继承树

image collection

Map接口继承树

map

线程安全

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据

backup

同步

Java2 集合框架(Collection)---Java2 集合可分为 Collection 和 Map 两种体系

容器,就是可以容纳其他Java对象的对象,Java容器里只能放对象,对于基本类型(int, long, float, double等),需要将其包装成对象类型后(Integer, Long, Float, Double等)才能放到容器里。很多时候拆包装和解包装能够自动完成。这虽然会导致额外的性能和空间开销,但简化了设计和编程, 容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表

Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等

任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换

Set和List的区别

  1. Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。

  2. Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。

  3. List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。


内容

集合

List

ArrayList

LinkedList

Vector

Set

HashSet

TreeSet

LinkedHashSet

Queue

Map

HashMap

HashTable

TreeMap

视频

有用的参考