容器<interface>Collection:继承接口:Set<interface>,List<interface>.
1,Set<interface>:没有顺序,不可重复。
实现类:HashSet.
Set的遍历方法
• for-each
• Iterator迭代器
• 无法使用for进行遍历(因为无序,所以没有get(i))
• HashSet、HashMap或Hashtable中对象唯一性判断
• 重写其hashCode()和equals()方法
HashSet:
采用Hashtable哈希表存储结构(神奇的结构)。添加速度快 查询速度快 删除速度快。无序
LinkedHashSet:
采用哈希表存储结构,同时使用链表维护次序。有序(添加顺序)
TreeSet:
排序依据。实现Comparable接口。创建实现Compator接口的类。采用二叉树(红黑树)的存储结构有序 查询速度比List快(按照内容查询)。查询速度没有HashSet快
2,List<interface>:有顺序(List中每个元素都有索引标记,可以根据元素的索引标记来访问元素,),可以重复(允许加入重复的元素)。
实现类:ArrayList(数组),LinkedList(链表),Vector(数组,线程安全的).
ArrayList:底层是用数组(可以存放任意数量的对象,长度不受限制,创建时不指定默认长度为10,超过该长度时进行扩容)实现的存储,查询效率高,增删效率低,线程不安全。
Vector:底层是用数组实现的List,相关的方法都加了同步检查,“线程安全,效率低”。
1,需要线程安全时,采用Vector,
2,不存在线程安全问题时,并且查找较多用ArrayList
3,不存在线程安全问题时,增加或删除元素较多用LinkedList。
键-值对<interface>Map:底层实现采用了哈希表(数据结构)。
实现类:HashMap;
哈希表:基本结构就是:数组+链表。
Map(特点 key-value映射)
HashMap
• Key无序 唯一 (Set)
• Value 无序 不唯一 (Collection)
LinkedHashMap
• 有序的HashMap 速度快
TreeMap
• 有序 速度没有hash快
Set和Map的关系
采用了相同的数据结构,只用于map的key存储数据,就是Set
集合和数组的比较
• 数组不是面向对象的,存在明显的缺陷,集合完全弥补了数组的一些缺点,比数组更灵活更实
用,可大大提高软件的开发效率而且不同的集合框架类可适用于不同场合。具体如下:
1 : 数组容量固定且无法动态改变,集合类容量动态改变。
2:数组能存放基本数据类型和引用数据类型的数据,而集合类中只能放引用数据类型的数据。
3:数组无法判断其中实际存有多少元素,length只告诉了array容量;集合可以判断实际存有多少元素,而对总的容量不
4:集合有多种数据结构(顺序表、链表、哈希表、树等)、多种特征(是否有序,是否唯一)、不同适用场合(查询快,便于删除、有序),不像数组仅采用顺序表方式
5:集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率
Collection和Collections的区别
1,Collection是Java提供的集合接口,存储一组不唯一,无序的对象。它有两个子接口
List和Set。
2,Java中还有一个Collections类,专门用来操作集合类 ,它提供一系列静态方法实现对
各种集合的搜索、排序、线程安全化等操作
HashMap和Hashtable的联系和区别
1, 实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用
两者的主要区别如下
1, Hashtable是早期JDK提供的接口,HashMap是新版JDK提供的接口
2, Hashtable继承Dictionary类,HashMap实现Map接口
3, Hashtable线程安全,HashMap线程非安全
4,Hashtable不允许null值,HashMap允许null值
Vector和ArrayList的联系和区别
• 实现原理相同,功能相同,都是长度可变的数组结构,很多情况下可以互用
• 两者的主要区别如下
Vector是早期JDK接口,ArrayList是替代Vector的新接口
Vector线程安全,效率低下;ArrayList重速度轻安全,线程非安全
Vector线程安全,效率低下;ArrayList重速度轻安全,线程非安全
长度需增长时,Vector默认增长一倍,ArrayList增长50%。
ArrayList和LinkedList 的联系和区别
• 联系:
都实现了List接口
有序 不唯一(可重复)
• ArrayList
在内存中分配连续的空间,实现了长度可变的数组
优点:遍历元素和随机访问元素的效率比较高
缺点:添加和删除需大量移动元素效率低,按照内容查询效率低,
• LinkedList
采用链表存储方式。
缺点:遍历和随机访问元素效率低下
优点:插入、删除元素效率比较高(但是前提也是必须先低效率查询才可。如果插入删除发生在头尾可以减少查询次数)