我在读一本叫做《java核心技术》的一本书,很厚很全,适合当一本参考书。
今天看了第13章java集合,重新整理了一下思路,也有很多新的收获。 *** 好了正文开始,第一次看到集合,我脑子里反映的还是{a,b,c}这个东西,这是数学里常说的集合。其实在java里,集合是指能够容纳数据的一种结构,它的分类有很多。
如下图所示:
集合都会继承Collection这个接口,这个接口会提供一些比较基本的方法比如add(),remove(),size()这类。
我先列一个目录,这些是我这次看的内容:
这是最常见的队列,遵循先进先出的原则,前一个线程安全,后一个线程不安全。 Deque ArrayDeque ==== 这两个是双向队列,两头都可以进行进出的操作,前一个线程安全,后一个线程不安全。 List LinkedList ArrayList ==== List是列表接口,这两个都继承这个接口.
第一个是链表结构,而且是双链表,每个元素都包含着数据和前后两个元素的地址,这种数据结构使得添加删除操作很快,但是查找较慢,因为每次查找都要从第一个元素重新开始找。
第二个是数组结构,而且是动态数组,不像array[]必须设置一个长度 (具体是如何操作的以后研究吧!),这样的结构查找比较快,但是插入删除这类操作会使整个数据都要进行位置的变化,所以不适合进行插入删除。
Set接口的主要特点就是元素是不能够重复的。
HashSet是线程不安全的,对应的是HashTable,这个线程安全。Hash也称作散列,散列的好处就是可以快速查询某个元素,具体为何会快原来我一直都是一知半解,直到遇到这个网站VisuAlgo ,可以自己感受一下。 TreeSet是HashSet的升级版,散列表是无序列表,每次查询的时候下一个元素都不确定,TreeSet就解决了这个问题,它通过红黑树,每次添加元素都会调整这棵树,(会记录这个插入顺序???怎么搞的~和优先散列表的区别) Map HashMap TreeMap ==== Map是键值对应数据结构的接口
HashMap是我们比较常用的一种数据类型,键值对应的数据结构,也可以通过Hash来快速查找。
TreeMap和TreeSet类似,在HashMap的基础上增加了树,可以记录添加顺序。 Stack Vector Hashtable ==== 剩下这三个其实是Java早期时用的数据结构,他们都是线程安全的
Stack就是我们常说的栈结构,先进后出。
Vector是线程安全的可增长数组,和ArrayList类似,在多线程情况下可以用这个。
HashTable相当于线程安全的HashMap,HashTable继承比较陈旧的Dictionary类,一般情况下HashMap比较优秀。还有一点不同就是HashMap的key和value都可以为null,而HashTable是不允许的。