collection
map
Collection与Map
Java定义两种集合,这两种集合的顶层接口分别是Collection和Map,这两个接口不能直接被使用,分别代表着两种不同的容器;
Collection是存储对象元素的集合,派生出三个子接口,set,list,queue;
Map代表的是键值对集合;
List接口
(1)List接口是允许重复的,指定索引的有序集合;有两个具体实现的类,分别是ArrayList和LinkedList;
(2)ArrayList:是实现list接口的可变大小的数组;LinkedList是实现list接口的链表的可维护序列容器;
(3)ArrayList与LinkedList的区别:
两者最主要的区别在于底层的数据结构不同而带来的操作效率不同;
查找方面:数组的效率更高,可以直接根据索引查找,但是链表只能从头查找;
插入方面:如果在中间进行插入则体现了链表极大的便利性;
内存方面:数组需要申请一段连续内容,当内存不够时需要进行扩容拷贝;但是链表则是离散的存储;
set接口
(1)set接口是不包含重复元素的集合;具有三个具体实现的类,HashSet散列集,LinkedHashSet链式散列集,TreeSet树集;
(2)HashSet是基于HashMap的数据结构,LinkedHashSet是基于LinkedHashMap结构,TreeSet是基于TreeMap结构;
HashMap与HashTable
(1)HashTable是实现Key-Value映射的哈希表,允许任何非NULL对象作为key或者value,是同步方法,线程安全,但是效率低;
(2)HashMap是非同步的,允许null key或者是null value;
(3)HashMap与HashTable非常相像,只是HashTable是同步的,所以是线程安全的;而HashMap不是同步的,所以是线程非安全的;在速度上,因为HashTable需要同步,所以速度要比HashMap要慢;
HashMap与HashSet
HashSet是根据HashMap实现的,对于HashSet的函数调用都会转换为适合HashMap方法,可以理解为HashSet是HashMap的简单包装;