java arraylist排序_一文读懂Java集合框架

5bf0b17ac9842c085ebe9f8e75d9ddcc.png

欢迎关注微信公众号:深入浅出Java源码

概念

Java集合框架为程序员提供了预先包装的数据结构和算法来操纵他们。集合框架被设计成要满足以下几个目标。

  • 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
  • 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
  • 对一个集合的扩展和适应必须是简单的。

所有的集合框架都包含如下内容:

  • 接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象
  • 实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
  • 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

Java中的集合类可以分为两大类:一类是实现Collection接口;另一类是实现Map接口。Collection是一个基本的集合接口,Collection中可以容纳一组集合元素(Element)。Map没有继承Collection接口,与Collection是并列关系。Map提供键(key)到值(value)的映射。一个Map中不能包含相同的键,每个键只能映射一个值。

Collection接口

0c0989c139123ec3b4919b0fc26e1d24.png

List接口下有ArrayList,Vector,LinkedList, Set接口下有HashSet,EnumSet,TreeSet,还有个Queue接口。挑常用的讲。

List

List接口是一个有序, 元素可重复的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。

  1. ArrayList

底层数据结构是数组,查改快,增删慢。

非线程安全,效率高

2. Vector

底层数据结构是数组,查改快,增删慢。

线程安全,效率低

3. LinkedList

底层数据结构是链表,查改慢,增删快。

非线程安全,效率高

Set

Set 接口存储一组唯一,无序的对象。

  1. HashSet

底层数据结构是哈希表。(无序,唯一)

依赖两个方法:hashCode()和equals() 保证元素唯一性

2. LinkedHashSet

底层数据结构是链表和哈希表。(FIFO插入有序,唯一)

1.由链表保证元素有序

2.由哈希表保证元素唯一

3. TreeSet

底层数据结构是红黑树。(唯一,有序)

如何保证元素排序的呢? 自然排序,比较器排序

Map接口

e631e8303ab7d162bf536f531297d526.png

Map下主要有HashTable,HashMap,TreeMap。

  1. HashMap

无序,非线程安全,效率高。HashMap允许null值(key和value都允许)。

2. HashTable

无序,线程安全,效率低。除构造函数外,HashTable的所有 public 方法声明中都有 synchronized关键字,而HashMap的源码中则没有。HashTable不允许null值(key和value都允许)。

3. TreeMap

有序,非线程安全,效率高(O(logN)),但比不上HashMap (O(1))。

参考来源

Java集合中List,Set以及Map等集合体系详解(

https://blog.csdn.net/zhangqunshuai/article/details/80660974)

Java集合框架(https://www.runoob.com/java/java-collections.html)

Java Map接口(https://www.runoob.com/java/java-map-interface.html)

71ad350ca147ad4355f6b7f35cf5e2f9.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值