数组与集合的比较
数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更加灵活,并且不同的集合框架可适用的场景不同
1.数组能放基本数据类型和对象,而集合存放的都是对象的引用,而非对象本身
2.数组更容易固定无法动态改变,集合容量方便
3.数组无法判断其中实际有多少个元素,length只能告诉我们数组的容量,而集合的size()可以确切知道元素的个数
4.集合有多种实现方式和不同的场合,不像数组,仅采用顺序表达式
5.集合以类的形式存在,具有封装.继承.多态等类的特性,通过简单的方法和属性就可实现各种复杂的操作,大大提高了软件开发效率
HashSet:
1.无序:添加元素的顺序与内存中储存的顺序不一致
2.无重复:使用equals()方法判断两者之间的值是否相等
3.可以为null
4.存储结构:散列储存,使用哈希技术
5.因为无序,所以不能使用for循环,也就不能通过index下标获取指定的值
TreeSet:
1.无序:添加元素的顺序与内存中储存的顺序不一致,但是会自然排序
2.无重复:使用equals()方法判断两者之间的值是否相等
3.不可以为null
4.存储结构:二叉树(红黑树)
5.因为无序,所以不能使用for循环,也就不能通过index下标获取指定的值
ArrayList:
1.有序:添加元素的顺序和内存中存储的顺序一致
2.可重复
3.可以为空
4.储存结构:线性顺序存储,查询效率较高
LinkedList:
1.有序:添加元素的顺序和内存中存储的顺序一致
2.可重复
3.可以为空
4.存储结构:链表存储,查询效率较低,但是新增和删除的效率较高
LinkedList中的方法效率 > ArrayList中的方法效率,对于头部和尾部元素的操作
HashMap:
1.无序:添加元素的顺序与内存中储存的顺序不一致
2.一般Key不可重复,value可重复,如果key重复,value会被覆盖
3.允许null为key,允许null为value
4.储存结构:散列储存,使用的哈希技术
怎么选择集合
set内存放的元素不允许重复,list存放的元素有一定的顺序
map的应用主要在利用键、值队进行快速查询
ArrayList和LinkedList的区别在于随机查询性能上ArrayList要好,但LinkedList的中间元素的插入与删除性能好
HashSet和TreeSet的区别在于集合内元素是否排序