集合总结

常见的数据结构:

  • 栈:先进后出,进口也是出口。
  • 队列:先进先出。有进口也有出口。
  • 数组:增删慢,查询快。
  • 链表:增删快,查询慢。

在集合中创建的数据接口:

  • ArrayXXX:底层数据结构是数组:查询快,增删慢。
  • LinkedXXX:底层数据结构是链表:查询慢,增删快。
  • HashXXX:底层的数据结构是哈希表,依赖hashCode()和equals()方法
  • TreeXXX:底层的数据结构是二叉树。
    两种排序的方式:
    自然排序:使元素实现comparable接口。
    比较器排序:创建集合是构造方法接收一个实现了Comparable接口的类的对象

集合:

collection:

集合和数组的区别:

  • 长度区别:
    数组长度固定。
    集合长度可变
  • 内容区别:
    数组的类型可以是基本数据类型,也可以是引用类型。
    集合只能存储引用类型。
  • 元素区别:
    数组只能存储同一种类型。
    集合可以存储不同的数据类型。(一般情况下存储的还是同一种类型。)

集合的继承体系:

List:有序的,可重复的。

  • ArrayList:底层使用的数组的数据结构,查询快,增删慢。线程不安全,效率高。
  • Vector:底层使用的也是数组的数据结构。线程安全,效率低。
  • LinkedList:底层使用的链表的数据结构。增删快,查询慢。

Set:无序的,不可重复的。

HashSet:

底层的数据结构是哈希表,哈希表底层依赖两个方面:hashCode()和equals();
执行的顺序:
首先比较hashCode(),哈希值是否相等。
相同:继续执行equals()方法。
返回true元素重复了,不添加
返回false:直接把元素添加到集合。
不相同:就把直接把元素放到集合中
LinkedHashSet:有序的并且唯一的,底层的数据结构是链表和哈希表,链表控制顺序,哈希表控制元素的唯一。

TreeSet:

底层数据结构是红黑数(一个自平衡的二叉树)
保证元素的排序的方式:

  • 自然排序
    让元素所属的类实现comparable的接口。
  • 比较器排序
    让集合的构造方法接收Comparable的实现类对象。

Map:

以键值对的方式存储数据,不能有重复的键,每个键最多对应一个值。

Map和Collection的区别:

  • Map:以键值对的形式存储数据,键是唯一的,值可以重复。
  • collection :存储单个元素。子接口:List有序的,元素可以重复。Set无序的,不可以重复,唯一的

hashMap:

基于哈希表实现。通过hashCode和equals确保键的唯一性。

treeMap

红黑树,默认根据key来排序,创建的时候构造方法需要接收一个实现了
comparable接口的实现类的对象,或者key值的类相同并实现了comparable接口。

Collections

Collections是针对集合进行操作的工具类。

Collection和Collections的区别

一个是集合的最顶层接口,一个是操作集合的工具类。

常用方法:

sort(Collection):对集合进行排序
reverse():反转集合中元素的顺序

集合关于线程的问题:

一:早期的线程安全集合:
Vector:Vector和ArrayList一样,是长度可变的数组,与ArrayList不同的是,Vector是线程安全的,他几乎给所有的public 修饰的方法都加上了synchronized关键字。由于加锁导致性能降低,在不需要并发访问同一对象时,这种强制性的同步机制就显得多余,所以现在Vector已被弃用

HashTable
HashTable和HashMap类似,不同点是HashTable是线程安全的,它给几乎所有public方法都加上了synchronized关键字,还有一个不同点是HashTable的K,V都不能是null,但HashMap可以,它现在也因为性能原因被弃用了

二:Collections包装方法
当Vector和HashTable弃用用之后,Collections提供了一系列的包装方法,把他们都包装成线程安全的集合。
Collections针对每一种集合都生命了一个线程安全的包装类,在原集合的基础上添加锁对象,集合中的每个方法都通过这个锁对象进行同步。

三:java.util.concurrent包中的集合
ConcurrentHashMap和HashTable都是线程安全的集合,他们的不同主要是加锁粒度的不同,CopyOnWriteArrayList和CopyOnWriteArraySet
它们是加了写锁的ArrayList和ArraySet,锁住的是整个对象,但读操作可以并发执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值