一、什么是集合
- 集合存放的都是对象的引用,而非对象本身。所以我们称集合中的对象就是集合中对象的引用
- 集合类存放于java.util包中
下面我们通过图形表来看一下:
二、集合有哪些,它们是怎样的关系
-
我们众所周知的集合一般有三种
*它们分别是 Set集合、List集合和Map集合*
-
而集合主要分为Collection接口和Map接口
List、Set、Queue继承于Collection接口,而Map单独成为Map集合 List分为三个子类,ArrayList,LinkList和Vector Set分为HashSet,TreeSet和LinkedHashSet Queue是队列,有着先进先出的特点 而Map衍生出的集合分为HashMap,HashTable,TreeMap和LinkedHashMap
三、集合之间各自的特点
List的特点: 有序的,可以添加重复元素
遍历方式:通过下标遍历,增强for循环(fore),迭代器Iterator
* ArrayList:它是数组形式的集合,按照插入顺序来保存元素,可以利用下标来查找值(查询快,增删慢)
* LinkList:它是链表结构的集合(增删快,查询慢)
* Vector:它也是数组形式的集合,它使用了sychronized方法(线程安全),所以在性能上比ArrayList要差些
* 注:ArrayList和Vector的区别:
1、同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的
2、数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
Set的特点: 无序的,元素不可重复
遍历方式:增强for循环(fore),迭代器Iterator
* HashSet:速度最快,元素是无序的,允许元素为null但只能有一个元素为null
* TreeSet:(树形集合)按照比较结果的升序来保存元素
* LinkedHashSet:按照被添加的顺序来保存元素
Map的特点: 键值对的形式存储数据,键不可重复值可重复
遍历方式:1、加强for循环map.keySet(),然后通过键key获取到value值
for(String s:map.keySet()){
System.out.println("key : "+s+" value : "+map.get(s));
}
2、Map.Entry<String, String>的加强for循环遍历输出键key和值value
for(Map.Entry<String, String> entry : map.entrySet()){
System.out.println("键 key :"+entry.getKey()+" 值value :"+entry.getValue());
}
* HashMap:无序,提供了最快的访问技术
* TreeMap:(树形集合)按照比较结果的升序来保存键
* LinkedHashMap:按照查询顺序来保存键,同时也HashMap的查询速度
四、Array(数组)与ArrayList(集合)有什么区别
- ArrayList是Array的复杂版本
- 存储的数据类型:Array只能存储相同数据类型的数据,而ArrayList可以存储不同数据类型的数据
- 长度的可变:Array的长度是固定的,而ArrayList的长度是可变的
五、HashMap的实现原理
存储对象时,我们将K/V传给put方法时,它调用hashcode计算hash从而得到bucket位置,进一步存储,HashMap会根据当前bucket的占用情况自动调整容量
获取对象时,我们将K传递给get,他调用hashcode计算hash从而得到bucket位置,并进一步调用equals()方法确认键值对