JAVA学习——容器

本文详细介绍了Java集合框架中的ArrayList、LinkedList、Set(HashSet与TreeSet)以及Map(HashMap与TreeMap)的特性和使用场景。ArrayList基于动态数组实现,适合随机访问;LinkedList通过链表实现,擅长插入和删除;Set接口中,HashSet提供快速查找,TreeSet则支持排序;Map接口中,HashMap适合查找和删除,TreeMap则适合有序遍历。此外,还讨论了它们在队列和栈实现中的应用。

JAVA 学习

参考源:https://zhuanlan.zhihu.com/p/29421226

容器分类

img

如图所示,容器分为Collection和Map两类

1、Collection :单个元素的集合

2、Map :基于键值对的形式来保存,可以通过键值来查找对象

一、Collection

1.1 List

List的特点就是所有的元素是可以重复的。List接口在Collection的基础上增加了很多的方法。

List主要分为ArrayListLinkedList,前者底层是使用数组实现的List,后者是使用链表实现的List。

Vector是一个已经被弃用的类,因为他是线程同步的,而我们平时使用的时候都是非同步的,使用同步的坏处就是会在一个记录上加锁,防止多个程序访问同一条数据导致数据不同步。这样会导致访问速度变慢。

Stack是满足“后进先出”规则的容器,注意LinkedList可以实现所有的栈功能。

1.1.1 ArrrayList

ArrayList是一个可以动态增长的数组。

我们都知道Java中的数组一旦指定了长度就不可以改变,如果我们在业务中需要使用动态的数组,就可以使用ArrayList

ArrayList由于底层是使用数组实现的,所以随机访问速度快,插入删除较慢

1.1.2 LinkedList

LinkedList是使用链表实现的容器。

在列表中插入和删除速度快,但是查找需要遍历整个链表,速度较慢
使用LinkedList可以实现很多队列、栈的数据结构,并且有很多方法很类似,但是有细小的差别

  • getFirst和element都返回列表的头,但是不删除它,如果列表为空,抛出异常
  • peek实现的功能一样,但是列表为空时返回null
  • removeFirst和remove都是删除并返回列表的头,如果列表为空抛出异常
  • pool实现的功能一样,但是列表为空时返回null

使用LinkedList可以实现一个栈的功能,下面让我们写一个属于自己的栈

1.2 Queue

队列是一个满足“先进先出”的数据结构。
LinkedList提供了方法支持队列操作,并且实现了Queue接口,所以LinkedList是队列的一种实现,可以通过LinkedList向上转型为Queue

  • offer:讲一个元素插入对尾
  • peek:不移除的情况下将元素插入队尾,队列为空返回null
  • element:不移除的情况下将元素插入队尾,队列为空报错
  • poll:移除并返回队头,队列为空返回null
  • remove:不移除的情况下将元素插入队尾,队列为空报错

PriorityQueue是优先级队列,我们暂时先不介绍

1.3 Set

set代表的是数学上的集合的意思,所以set中的元素不可以重复。
所以set中查找是最为重要的操作,而对于查找来说,我们最常用的就是HashSet

  • HastSet底层是使用散列函数,在查询的方面有优化,基于Hash算法实现的性能优于TreeSet

  • TreeSet底层使用的是红黑树,当我们需要排序功能的时候才用到TreeSet

二、Map

Map是使用键值对存储的一种结构,所以在处理列如单词统计等方面是杀手锏
Map的键值对都可以为null
Map可以多维扩展。例如一个人拥有多个宠物,你可以这样定义:Map< Person, List< pet>>

  • Object put(Object key, Object value):放进一个键值对,返回值是被替换的值
  • Object remove(Object key)
  • void putAll(Map mapping)
  • void clear()
  • boolean containsKey(Object key)是否包含某个键
  • boolean containsValue(Object value)是否包含某个值

在Map中比较重要的是处理键值对的集合

  • public Set keySet():返回这个Map的所有键的集合,因为Map中键是唯一的,所以返回使用一个set
  • public Collection values():返回这个Map的所有值的集合,因为值可能重复,所以返回一个Collection
  • public Set entrySet():返回一个实现Map.Entry接口对象集合,使用这个方法可以遍历每一条记录。

HashMap更适合查找、删除、插入TreeMap更适合遍历。

t entrySet():返回一个实现Map.Entry接口对象集合,使用这个方法可以遍历每一条记录。

HashMap更适合查找、删除、插入TreeMap更适合遍历。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值