在说集合前我们说一下数组
数组:存储一组相同的数据类型,从而实现对数据的管理
优点:可以快速的对数组进行访问,效率高
缺点:容量在一开始就定义好了,不能随着需求的变化而扩容
这样就出现了集合框架
数组和集合的比较
数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下:
1:数组能存放基本数据类型和对象,而集合类存放的都是对象的引用,而非对象本身!
2:数组容易固定无法动态改变,集合类容量动态改变。
3:数组无法判断其中实际存有多少元素,length只告诉了数组的容量,而集合的size()可以确切知道元素的个数
4:集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式
5:集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率
集合框架所包含的内容
List(有序,允许重复元素)
ArrayList:
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
Vector:
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
##Set(无序,唯一,所以可用于去重操作)
HashSet:
底层数据结构:HashMap(哈希表)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()
TreeSet:
LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一
TreeSet
底层数据结构是红黑树。(唯一,有序)
1.如何保证元素排序的呢?
自然排序
比较器排序
2.如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定
针对Collection集合我们到底使用谁呢?(掌握)
唯一吗?
是:Set
排序吗?
是:TreeSet或LinkedHashSet
否:HashSet
如果你知道是Set,但是不知道是哪个Set,就用HashSet。
否:List
要安全吗?
是:Vector
否:ArrayList或者LinkedList
查询多:ArrayList
增删多:LinkedList
如果你知道是List,但是不知道是哪个List,就用ArrayList。
如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。
如果你知道用集合,就用ArrayList
Map(key-value)
HashMap:
底层数据结构:链表数组
可扩容,且最大容量极大,可看做容量无限
TreeMap:
底层数据结构:红黑树
可以实现按key排序(在使用中,要么使用TreeMap(Comparator),要么让key对象实现Comparable)
红黑树,容量无限
参考博客
https://www.cnblogs.com/java-zhao/p/5112542.html
https://blog.csdn.net/zhangqunshuai/article/details/80660974
本文链接: https://github.com/ggzhi/ggzhi.github.io/2019/10/21/Java%E9%9B%86%E5%90%88%E6%A6%82%E8%BF%B0/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
![知识共享许可协议](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)