集合框架说明文档

集合框架说明文档(还未完善)

集合框架一共分为两个大类:Collection和Map接口

Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。这里和我们数学中学习的函数相类似。

Map 存储的是键值对形式的元素,键唯一,值可以重复。一个自变量只能由一个函数值,但是同一个函数值可以对应多个自变量;Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复

1 Collection

Collection主要有三个大的子类:

三个主要接口:List、Queue、Set

1.1List

List中有两个主要实现类ArrayList和LinkedList,还有一个实现类叫做CopyOnArrayList

1.1.1ArrayList

数组:

狭义上的数组指的就是一堆存储数的连续内存空间

广义上来说,只要是一片连续空间存储的“数据“都可以称作数组,这也是ArrayList存在的原因吧,可以存放任何数据类型。

1.1.2LinkedList

链表:

一个链状结构,链表是一种物理储存单元上非连续、非顺序的数据结构。

主要由节点(Node)构成,每一个节点都包含上一个节点的地址和下一个节点的地址,还有它存放的值

1.2Queue

Queue有一个实现类我们之前了解过了:LinkedList还有一个主要的实现类叫做:PriorityQueue

有一个子接口:Deque,我们不难想象设计这个的过程,队列可以单向前进,当然也可以双向前进嘛。于是就有了Deque

Deque有一个实现类ArrayDeque

1.2.1PriorityQueue
1.2.2ArrayDeque

1.3Set

Set有一个主要的实现类:HashSet

还有一个子接口:SortedSet;SortedSet有一个子接口叫做NavigableSet,它有一个实现类:TreeSet

特点:

  1. 不允许存储重复的元素
  2. 没有索引,没有带索引方法,也不能使用普通的for循环遍历

关于索引:

索引简单点说就是,我们可以按照一种方法去寻找,提高我们的查询速度

就像我们在查字典的时候,我们可以按照拼音来查找,提高查找速率,这样比起一个一个,一页一页地找要方便迅速的多。

1.3.1HashSet

是一种散列表的结构。

通过哈希算法,将集合中每一个值算出一个对应的哈希值,作为每一个小组区分开来,出现相同的哈希码就将其放在后面,形成链表的结构。

特点

  1. 不允许存储重复的元素
  2. 没有索引,没有带索引的方法,也不能使用普通的for循环遍历
  3. 是一个无序的集合,存储元素和取出元素的顺序有可能不一致
  4. 底层是一个哈希表结构(查询的速度非常快)
1.3.2TreeSet

和HashSet不同在于,TreeSet是排序的,不允许放入null值

2Map

Map有一个子接口:SortedMap;SortedMap有一个子接口:NavigableMap;NavigableMap有一个实现类:TreeMap

有三个主要的实现类:HashTable、EnumMap、HashMap

HashMap有一个子类:LinkedHashMap

3各类说明(重点)

3.1List和Set

集合(List)和Set的区别是什么?

两种数据结构有本质的区别,虽然都继承自Collection

List:是一个集合,我们可以把他看成一个集体,在这个集体中,可以出现同名的人

Set:翻译过来也是一个集合,那么它和List为什么要区分开呢?原因在于他们有本质的区别,诞生于需要,Set中不含有重复的“名字”,保证了键值唯一

3.2Set和Map

Set和Map的区别?

从客观角度看来,两个类继承自不同的直接父类,那么必然有不同点,但是从主观看上去,两种数据结构又有着惊人的相似性

先来说说Map

Map我们都清楚,它是一种Key-Value键值对的数据结构,不允许存在重复的Key,且如果为HashMap的时候,只能存在一个null键;如果为HashTable时,不允许存在null键

HashMap为实现类的时候


public class Main {
    public static void main(String[] args) {
        Map<String,Integer> stringIntegerMap = new HashMap<>();
        stringIntegerMap.put(null,1);
        System.out.println(stringIntegerMap.get(null));
    }
}
/*
1
*/

可以看到输出结果为1

如果为HashTable

public class Main {
    public static void main(String[] args) {
        Map<String,Integer> stringIntegerMap = new Hashtable<>();
        stringIntegerMap.put(null,1);
        System.out.println(stringIntegerMap.get(null));
    }
}
/*
Exception in thread "main" java.lang.NullPointerException
	at java.util.Hashtable.put(Hashtable.java:465)
	at com.fq.book.project8.program2.Main.main(Main.java:10)
*/

直接抛异常

而Set这种数据结构只能存在一个“键”,它本来时只能存放一个类型的数据,我们不妨将他看作是一种特殊的Map,没有“值”的Map

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值