博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java集合框架概述
阅读量:4099 次
发布时间:2019-05-25

本文共 3726 字,大约阅读时间需要 12 分钟。

92

Collection就是对对象存储的一种方式,

CollectionMap的区别:

1Collection每个位置只能保存一个元素(对象)

2Map保存的是“键值对”,就像一个小型的数据库

Collection

Collection接口继承自Iterator接口,实现Iterator接口的对象允许使用foreach进行遍历,

List下的几个常用类:linkedListArrayListVectorStack

1List:代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许加入重复元素,因为它可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引

1ArrayList:是基于数组实现的List类,它封装了一个动态的增长的、允许再分配的Object[]数组。每个ArrayList实例都有一个容量,即用于存储元素的数组的大小,这个容量可以随着不断添加新元素而自动增加,默认长度为10增长率为50%

2LinkedList:可以用作stackqueue或双向队列。如果有多个线程同时访问一个list,则必须自己实现访问同步,一种解决方式是在创建list时构造一个同步的List

List list = Collection.synchronizedList(new LinkedList(……))

3Vector:与ArrayList类似,但是Vector是同步的,长度增长率100%

(4Stack继承自Vector

2Set: 不能含有重复元素,用equal判断两个对象是否相同

HashSetTreeSetSortedSetEnumSet

1HashSet:底层数据结构式哈希表,用Hash算法来存储集合中的元素。

    LinkedHashSetLinkedHashSet集合也是根据元素的hashCode值来决定元素的存储位置,但和HashSet不同的是,它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。当遍历LinkedHashSet集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里的元素。LinkedHashSet需要维护元素的插入顺序,因此性能略低于HashSet的性能,但在迭代访问Set里的全部元素时(遍历)将有很好的性能(链表很适合进行遍历)

2SortedSet:此接口用于排序操作

    TreeSet:底层数据结构式二叉树,是SortedSet接口的实现类。注:添加元素必须实现Comparable接口或在实例TreeSet时指定比较器。可以对Set集合中的元素进行排序。保证元素唯一性的依据:compareTo方法return 0

3EnumSet:是一个专门为枚举设计的集合类,EnumSet集合中所有元素必须都是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐式地指定,EnumSet的集合元素也是有序的,它们以枚举值在Enum类内的定义顺序来决定集合元素的顺序

3Queue:用于模拟“队列”这种数据结构,新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素,队列不允许随机访问队列中的元素

1PriorityQueue:保存队列的信息并不是按照加入队列的顺序,而是按照队列元素得大小进行重新排序

(2Deque:该接口代表一个“双端队列”,故它的实现类既可以当栈也可以当队列来使用

https://www.cnblogs.com/LittleHann/p/3690187.html

Map

Map:用于保存具有“映射关系”的数据,Mapkey不允许重复,Java是先实现了Map,然后通过包装了一个所有value都为nullMap就实现Set集合。

Map的这些实现类和子接口中key集的存储形式和Set集合完全相同(key不能重复)

Map的这些实现类和子接口中value集的存储形式和List非常类似(value可以重复、根据索引来查找)

Map的子类:HashMapLinkedMapWeakHashMapSortedMapTreeMapHashTable

1HashMap:和hashSet集合一样不能保证元素的顺序一样,HashMap也不能保证key-value对的顺序。并且类似于HashSet判断两个key是否相等的标准也是: 两个key通过equals()方法比较返回true;同时两个keyhashCode值也必须相等

    LinkedHashMap:也使用双向链表来维护key-value对的次序,该链表负责维护Map的迭代顺序,与key-value对的插入顺序一致

2Hashtable:一个古老的Map实现类

    Properties对象在处理文件是特别方便,可以把Map对象和属性文件关联起来,从而可以把Map对象中的key-value对写入到属性文件中,也可以把属性文件中的"属性名-属性值"加载到Map对象中

3SortedMap

    TreeMap:就是一个红黑树数据结构,每个key-value对即作为红黑树的一个节点。TreeMap存储key-value对(节点)时,需要根据key对节点进行排序。TreeMap可以保证所有节点处于有序状态。同样,TreeMap也有两种排序方式:自然排序、定值排序

4WeakHashMap:与HashMap用法类似,区别在于HashMapkey保留了对实际对象的“强引用”,这意味着只要该HashMap对象不被销毁,该HashMap所引用的对象就不会被垃圾回收。但WeakHashMapkey只保留了对实际对象的弱引用,这意味着如果WeakHashMap对象的key所引用的对象没有被其他强引用变量所引用,则这些key所引用的对象可能被垃圾回收,当垃圾回收了该key所对应的实际对象之后,WeakHashMap也可能自动删除这些key所对应的key-value

5IdentityHashMap:实现机制与HashMap基本相似,当且仅当两个key严格相等(key1 == key2)时,IdentityHashMap才认为两个key相等

6EnumMapEnumMap是一个与枚举类一起使用的Map实现,EnumMap中的所有key都必须是单个枚举类的枚举值。创建EnumMap时必须显式或隐式指定它对应的枚举类。EnumMap根据key的自然顺序 (即枚举值在枚举类中的定义顺序)

1、用链表来模拟实现栈和队列,通过链表的addFirst()addLast()方法

2LinkedList可以实现Queue,因为他实现了Deque接口,而Deque接口是继承自Queue的,因此可以用作Queue的一种实现

    Offer将一个元素插入到队尾;peekelement都是在移除的条件下返回队头

Pollremove方法将移除并返回队头

LinkedList的学习

1LinkedList实现了Deque接口和Queue接口,Queue扩展自CollectionQueue的主要操作有三个(每个操作有2个方法)

2java中有一个stack类,但是已经过时了。Java中没有单独的stack接口,栈的相关方法包括在了表示双端队列的接口Deque中,主要有三个方法:peek(),push(),pop()

  • push表示入栈,在头部添加元素,栈的空间可能是有限的,如果栈满了,push会抛出异常IllegalStateException
  • pop表示出栈,返回头部元素,并且从栈中删除,如果栈为空,会抛出异常NoSuchElementException
  • peek查看栈头部元素,不修改栈,如果栈为空,返回null

(3)栈和队列只是双端队列的特殊情况,他们的方法都可以使用双端队列的方法替代,使用不同的名称和方法,概念上更加清晰

LinkedList底层的实现:

    1LinkedList可以进行所有List的操作,因为其实现了List接口,同时LinkedList可以存放任何元素,包括null

    2LinkedList底层的实现是一个循环的双向链表,所有根据索引的查找操作都是按照双向链表的需要执行的,根据索引从前或从后开始搜索,并且从靠近索引的一端开始,这是通过内部的Node(int index)方法实现的

    3LinkedList不是线程安全的,可以通过Collections.synchronizedList(new LinkedList(…));创建线程安全的LinkedList

    4LinedList的迭代器 iterator listIterator 方法返回的迭代器是快速失败

LinkedList中的一个节点是什么以及具体的数据结构

保存结点的真实值,还保存了这个节点的前一个节点的引用和后一个节点的引用

你可能感兴趣的文章
react super理解
查看>>
mint-ui弹窗cdn引入如何调用?
查看>>
github+hexo搭建博客基础教程
查看>>
移动端无插件上拉加载
查看>>
webpack基础
查看>>
webpack基础配置(1)
查看>>
webpack图片打包(2)
查看>>
centos7安装docker
查看>>
docker容器操作
查看>>
docker镜像制作
查看>>
激活Golang
查看>>
var _ HelloServiceInterface = (*HelloServiceClient)(nil)的特殊含义
查看>>
go语言(*Type).什么含义如var CloseFile = (*File).Close
查看>>
window系统下,设置mongodb远程访问
查看>>
centOS7最小安装设置网络
查看>>
Golang环境安装
查看>>
cannot find -lstdc++
查看>>
Centos修改ip方式
查看>>
centos7安装mongodb
查看>>
centos 7 关闭selinux
查看>>