java数据容器

java数据容器

在这里插入图片描述

Collection接口实现类的特点

1.Collection接口的实现子类可以存放多个元素,每个元素可以是Object
2.有些Collection接口的实现类,是有序的(List),有些不是有序的(Set)
3.List 主要分为ArrayList、 LinkedList 和 Vector;

ArrayList(查询快)

ArrayList是Array(动态数组)的数据结构,ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。
1.允许插入的元素重复
2.插入的元素是有序的
3.动态扩容
4.非线程安全,异步
5.基于动态数组的数据结构
6.擅长随机访问(get set)

LinkedList (增删快)

LinkedList是Link(链表)的数据结构。LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。故查找的时候比较慢。
LinkedList底层通过双向链表实现,双向链表的每个节点用内部类Node表示。LinkedList通过first和last引用分别指向链表的第一个和最后一个元素。
1、LinkedList维护了元素插入的时候的顺序;
2、实现了Queue、Deque接口;
3、是非线程安全的;
4、适合删除操作,因为,删除不会发生移位;
5、可以包含重复的元素;

LinkedeList和ArrayList的区别

1、数据结构不同
ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。
2、效率不同
当随机访问List (get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。
ArrayList增删慢,查询快。LinkedList增删快,查询慢。
3、自由行不同
ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。
4、主要控件开销不同
ArrayList主要控件开销在于需要在List列表预留一定空间;而LinkList主要控件开销在于需要存储节点信息以及节点指针信息。

Set接口

Set接口是Collection接口的子类,其继承了所有方法。
在这里插入图片描述
HashSet集合则实现了Set接口,其内部存储数据时依靠哈希表。
在这里插入图片描述

在这里插入图片描述

TreeSet

TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSet抽象类,实现了NavigableSet, Cloneable, java.io.Serializable接口。
在这里插入图片描述

TreeSet 继承于AbstractSet,所以它是一个Set集合,具有Set的属性和方法。
TreeSet 实现了NavigableSet接口,意味着它支持一系列的导航方法。比如查找与指定目标最匹配项。
TreeSet 实现了Cloneable接口,意味着它能被克隆。
TreeSet 实现了java.io.Serializable接口,意味着它支持序列化。
TreeSet为基本操作(add、remove 和 contains)提供受保证的 log(n) 时间开销。
另外,TreeSet是非同步的。 它的iterator 方法返回的迭代器是fail-fast的。
两种排序方式:自然排序(实现Comparable接口) 和 定制排序(Comparator)
在这里插入图片描述

Set接口的遍历方式

同Collection接口的遍历方式一样,因为Set接口是Collection接口的子接口
1.可以使用迭代器
2.增强for循环

不能使用普通for循环遍历,因为不能使用索引的方式来获取集合中的元素

Map

Map接口是一种双列集合,它的每个元素都包含一个键对象Key和值对象Value,键和值对象之间存在一种对应关系,称为映射。键和值可以是任意数据类型,并且键对象Key不允许重复,这样在访问Map集合中的元素时,只要指定了Key,就能找到对应的Value。

Map接口中常用集合概述

Map接口中常用的集合为HashMap、LinkedHashMap。

  1. HashMap<K,V> 存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
  2. LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
  3. Hashtable<K,V>:慢慢淘汰了。

Map集合的遍历方式

1.利用键获取值的方式。首先调用Map的keySet()方法,把Map中的所有键存储到一个Set中,然后就可以遍历Set,拿到key了,最后通过get操作获取value的值。
在这里插入图片描述

2.entrySet()方法。
Map接口中又写了一个接口:Entry是映射关系的接口。方便理解,可以把key-value想成一对夫妻,而Entry就是结婚证。
Map接口中有方法entrySet(),通过这个方法可以得到一个Set集合,集合中存放的是Entry类型的对象(映射关系的对象,结婚证)。Entry接口的getKey()、getValue()方法可以得到key和value。
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值