Java中集合的常用类用法总结
- 集合的由来
- 数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少
- 数组和集合的区别
- 区别1 :
- 数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
- 集合只能存储引用数据类型(对象),集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象,比如int类型变Integer类型
- 区别2:
- 数组长度是固定的,不能自动增长
- 集合的长度的是可变的,可以根据元素的增加而增长
- 区别1 :
数组和集合什么时候用
* 1,如果元素个数是固定的,推荐用数组
* 2,如果元素个数不是固定的,推荐用集合集合继承体系
- 单列集合Collection
- 底层依赖的是双列集合(HashSet,两个藏起来一半)
- 双列集合Map
- 单列集合Collection
单列集合
- Collection
- List(存取有序,有索引,可以重复)
- ArrayList
- 底层是数组实现的,线程不安全,查找和修改快,增和删比较慢
- LinkedList
- 底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢
- Vector
- 底层是数组实现的,线程是安全的,无论增删都慢(出现比较早,现在已经被集合替代了)
- 如果查找和修改多,用ArrayList
- 如果增和删多,用LinkedList
- 如果都多,用ArrayList
- ArrayList
- Set(存取无序,不可以重复)
- HashSet
- 底层是Hash算法实现
- LinkedHashSet
- 底层是链表实现,便是也可以保证元素唯一,和HashSet原理一样
- TreeSet
- 底层是二叉树算法实现
- 一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用HashSet,HashSet的效率比较高
- TreeSet在面试的时候比较多,比如问你有几种排序方式和几种排序方式的区别
- HashSet
- List(存取有序,有索引,可以重复)
双列集合
- Map
- HashMap
- 底层是Hash算法,针对键
- LinkedHashMap
- 底层是链表,也是针对键
- TreeMap
- 底层是二叉树算法,针对键
- 开发中用HashMap比较多
- HashMap
集合用法小结
- 单列集合
- 如果存储的是重复的元素,我们优先考虑的是ArrayList,如果不需要重复元素,我们优先考虑的是HashSet
- 双列集合
- 直接考虑的是HashMap,除非需要对键进行排序,我们才考虑TreeMap