Java集合框架

目录

什么是集合框架

collection接口

 Map接口


 

什么是集合框架

Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes

其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD

简单来说,集合框架就是由接口,抽象类,实现类组成的,这些类和接口里面实现了数据结构。

集合框架图大致如下:

我们知道接口其实就是对一个行为的抽象,也相当于一个标准,因为大多数类都有这种特性于是将其抽象成了一个接口。

我们从上往下看,Iterable是一个增强for-each循环的接口,实现这个接口的类都能使用for-each循环进行遍历。而我们看到Map并没有实现Iterable接口,因此Map下的类都不能使用for-each循环。

至于Collection接口,其实就是用来管理元素的,而这些元素就是实现它的类。

List是一个线性表,包括数组和链表,Queue是一个队列,set是一个集合,里面的元素不能重复。

 其中ArrayList底层是一个顺序表,LinkList底层是一个双向链表,能表示一个双向链表、普通队列和双端队列(队头队尾都能进出元素)。stack是一个栈,priorityQueue是一个优先队列,底层是一个二叉树。Treeset底层是一个红黑树,hashset底层是一个哈希表。hashmap底层也是一个哈希表,treeMap底层也是一个红黑树。(现在只是大致了解,后续博文会详细介绍)。

Map是一个键值对,也就数所谓的<Key,Value>结构,能够存储k值和v值,而左半部分collection下的只能存储k值。

集合框架中不止这些数据结构,还提供了一些工具,例如迭代器、比较器等;

collection接口

collection官方文档

前面介绍了collection下面的一些类,那现在来使用一下collection熟练熟练。

因为大多数类都实现了collection接口,因此我们可以实现向下转型,就用ArrayList吧。对此不理解的可以戳这:多态中的向下转型

        Collection<Integer>coll = new ArrayList<>();
        coll.add(1);
        coll.add(2);
        coll.add(3);
        coll.add(4);
        System.out.println(coll);
        boolean ret1 = coll.contains(2);
        System.out.println(ret1);
        boolean flg1 = coll.isEmpty();
        System.out.println(flg1);
        boolean flg2 = coll.remove(2);
        System.out.println(flg2);
        System.out.println(coll.remove(2));
        boolean ret2 = coll.contains(2);
        System.out.println(ret2);
        int size = coll.size();
        System.out.println(size);
        coll.clear();
        System.out.println(coll.isEmpty());

关于尖括号中的Integer类型是属于泛型,不了解的也可以戳这:泛型

运行结果如下:

 Map接口

Map官方文档

关于Map,其实相当于一个字典,首先是创建一个字典把一个key值和一个value值存进去。

然后就可以按照key值从字典中寻找对应的value值。

 示例代码:

        Map<String,String>map = new Hashtable<>();
        map.put("三国演义","罗贯中");
        map.put("红楼梦","曹雪芹");
        map.put("西游记","吴承恩");
        map.put("水浒传","施耐庵");
        System.out.println(map);
        map.put("Java","bit");
        //如果字典中已经存在了key值,则返回对应的value值,如若没有,返回设置的默认值
        String str1 = map.getOrDefault("Java","Bit");
        System.out.println(str1);

        System.out.println(map.remove("Java"));
        String str2 =  map.getOrDefault("Java","Bit");
        System.out.println(str2);

        System.out.println(map.containsKey("三国演义"));

        System.out.println(map.containsValue("罗贯中"));

        System.out.println(map.isEmpty());

        System.out.println(map.size());

 结果如下:

我们注意到插入的顺序与输出的顺序并不是相同的,这就得从哈希表的函数说起,因为一个k-v键值对值 存入map中会经过哈希函数的加工最后才存进哈希表中,因此顺序并不会相同。

示例:

entryset方法:

我们观察entrySet方法的返回值是一个Set<Map.Entry<K, V>> ,这个我们先不管,之后在将哈希表时再详细介绍,现在先学会使用:

        Set<Map.Entry<String, String>>entry = map.entrySet();

        //entry接收了map里的k-v键值对并存储在一个set集合里
        //因此我们可以使用for-each循环
        // 使用一个Map.Entry<String, String>类型的entry1 
        // 接收set集合里的所有Map.Entry<String, String>类型元素

        for (Map.Entry<String, String> entry1: entry) {
            System.out.println(entry1);
        }

结果:

 

本文收录专栏《数据结构》。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海绵宝宝养的的小窝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值