集合和数组的比较
数组不是面向对象的,集合弥补了数组缺陷,更灵活实用。不同的集合框架适用于不同场合。具体区别如下:
- 数组能存放基本数据类型和对象,集合类中只能存放对象
- 数组很难动态改变,集合类容易动态改变
- 数组无法判断其中实际元素个数,
length()
只告诉了数组的容量,而集合的size()
可以 - 集合有多种实现方式、不同适用场合,数组仅采用顺序表方式
- 集合以类的形式存在,具有封装、继承、多态等特性,通过简单方法和属性即可实现各种复杂操作,大大提高了开发效率
Collection和Collections的区别
Collection
是Java提供的集合接口,存储一组不唯一、无序的对象。它有两个子接口List
和Set
。- Java还有一个
Collections
类,专门用来操作集合类,它提供了一系列的静态方法
实现对各种集合的搜索、排序、线程安全化等操作。
ArrayList和LinkedList的联系和区别
ArrayList实现了长度可变的
数组
,在内存中分配连续空间。遍历元素和随机访问元素效率比较高。LinkedList采用
链表
存储方式。插入、删除效率比较高。
Vector和ArrayList的联系和区别
实现原理相同,功能相同,都是长度可变的数组结构,多数时候可以互用。
区别:
- Vector是早期的JDK接口,ArrayList是替代Vector的新接口
- Vector线程安全,ArrayList重速度轻安全
- 长度需要增长时,Vector默认增长一倍,ArrayList增长50%(1.5+1)
HashMap和Hashtable的联系和区别
实现原理相同,功能相同,底层都是哈希表结构,查询速度块,多数时候可以互用。
区别:
- Hashtable是早期的JDK接口,HashMap是新版的JDK提供的接口
- Hashtable继承Dictionary类,HashMap实现Map接口
- Hashtable线程安全,HashMap线程非安全
- HashMap中key和value都可以为空,Hashtable不允许为空