拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 【JavaSE系列】Java集合框架之Collection,Map界面

【JavaSE系列】Java集合框架之Collection,Map界面

白鹭 - 2022-02-12 1912 0 0

??前面的话??

本篇文章带大家认识Java基础知识——集合框架,从本篇文章开始正式拉开资料结构的序幕,要深入了解一件事,那必然先得见个面,本文带大家认识Java集合框长什么样,以及怎么使用Collection和Map界面,


导航小助手

  • 1.初见集合框架
  • 2.Collection
  • 3.Map


0


1.初见集合框架

官方档案是这幺介绍集合框架的,集合框架是用于表示和操纵集合一个统一架构,所有集合框架都包含以下内容:
界面:这些是代表集合的抽象资料型别,界面允许独立于其表示的细节来操作集合,在面向物件的语言中,界面通常形成层次结构,
实作:这些是集合界面的具体实作,本质上,它们是可重用的资料结构,
算法:这些是对实作集合界面的物件执行有用计算的方法,例如搜索和排序,这些算法被称为是多型的:也就是说,相同的方法可以用于适当集合界面的许多不同实作,本质上,算法是可重用的功能,
除了 Java 集合框架,集合框架最著名的例子是 C++ 标准模板库 (STL) 和 Smalltalk 的集合层次结构,
参考链接:官方集合框架介绍

Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在java.util包下的一组界面 interfaces和其实作类 classes ,通俗说,集合框架就是由许许多多的界面,类,它们之间通过一系列的继承和扩展关系连接构建成一个“网”,称作框架,这些界面和类提供了多种组织资料的方式和方法,其中资料的组织方式就是资料结构,提供的方法包含对资料结构的增删查改和排序方法,这些方法可以由不同的算法来实作,比如说排序有冒泡,选择,插入,希尔,桶,快速,堆,计数排序算法等等,

简单来说,集合框架就是由界面,抽象类,实作类组成的,这些类和界面里面实作了资料结构,
1-1
Java中,集合框架大致如图所示:
1-2
根据这张组成图,Iterable界面主要用于使用增强for回圈for-each,所以实作Iterable 界面的资料结构可以使用for-each进行遍历,如List表示线性结构,Queue表示队列,Set表示集合,上述三种界面都扩展了这个界面,所以这几类的资料结构都是可以使用for-each回圈的,但是Map界面是单独的,表示键值对,这类资料结构是不可以使用for-each回圈的,Collection界面其实就是用来管理物件的,根据这张图知道该界面除了没有被键值对实作,其他的所有资料结构都实作了该界面,所以该界面是可以管理多种资料结构物件的,这些物件也被称为元素,

对于实作类,根据实作不同的界面形成了不同的资料结构,比如ArrayList(顺序表),LinkedList(链表与队列),Stack(堆栈)等等,基本上集合框架包含了大部分的资料结构,在后续博文都会一一介绍,除了这些,集合框架还提供了不少工具,比如迭代器比较器等等,
1-3
Java集合框架的大致面貌就是这样,具体怎么使用及部分资料结构的实作在后续博文都会讲到,

2.Collection

前面已经了解了Java集合框架的大致面貌,相信你已经对集合有了一定的认知,趁热打铁,来学习一下框架中Collection的使用吧!
大多数的资料结构实作了该界面(除了键值对),那也意味着,Collection界面可以接受多种实作类的参考,从而Collection常常用来管理物件,各实作类也能够使用该界面当中的方法,但总体上Collection界面用的不多,
2-0

了解更多Collection:官方Collection说明

不准备将该界面中所有的方法都一一列举,这里就说明一些常用的方法吧!

方法说明
boolean add(E e)将元素 e插入集合中
void clear()洗掉集合中的所有元素
boolean isEmpty()判断集合是否没有任何元素,俗称空集合
boolean remove(Object e)如果元素 e 出现在集合中,洗掉其中一个
int size()回传集合中的元素个数
Object[] toArray()回传一个装有所有集合中元素的阵列

绝大多数的资料结构都实作了Collection界面,这里就以ArrayList为例吧!

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

public class Test {
    public static void main(String[] args) {
        Collection<Integer> coll = new ArrayList<>();
        //添加元素
        coll.add(115);
        coll.add(2022);
        coll.add(4848);
        //ArrayList有实作toString方法,因此可以使用参考名输出整个集合元素
        System.out.println(coll);
        //获取元素个数
        System.out.println(coll.size());
        //转换成阵列,回传阵列型别是Object[]
        Object[] arr = coll.toArray();
        System.out.println(Arrays.toString(arr));
        //判断并洗掉元素e
        System.out.println(coll.remove(4848));
        System.out.println(coll);
        //清空集合
        coll.clear();
        System.out.println(coll);
        //判断集合是否为空
        System.out.println(coll.isEmpty());
    }
}

运行结果:
2-1

3.Map

Map界面能够接受键值对相关的资料结构物件的参考,这里就介绍一些常见的方法吧!
所谓键值对就是一个key对应一个val,其他部分语言称为字典,多个键值对组成的集合称为地图,
3-0

想知道更多不妨看看官方对Map的说明:Map官方说明

常用的方法:

方法说明
V get(Object k)根据指定的 key 查找对应的 val
V getOrDefault(Object k, V defaultValue)根据指定的 key 查找对应的 val,没有找到用默认值代替
V put(K key, V value)将指定的 key-val 放入 Map
boolean containsKey(Object key)判断是否包含 key
boolean containsValue(Object value)判断是否包含 value
Set<Map.Entry<K, V>> entrySet()将所有键值对回传成一个集合
boolean isEmpty()判断map是否为空
int size()回传键值对的数量

注意,上述方法中的V,K表示泛型的意思,这里你只要知道使用泛型可以传递型别就可以了,后续博文会陆续说明泛型,
举例使用HashMap举例,它是使用哈希表所实作的键值对,

插入键值对——put方法

import java.util.HashMap;
import java.util.Map;

public class TestMap {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        //插入键值对
        map.put("1024","程序员节");
        map.put("大年初一", "春节");
        map.put("一月一日", "元旦节");
        System.out.println(map);
    }
}

3-1
我们会发现,键值对的顺序与我们插入的顺序不一致,这是因为HashMap是利用哈希表实作的,对key进行哈希映射存盘到对应索引的哈希表位置上,所以插入的先后不决定键值对的储存顺序,

根据key查找val——get,getgetOrDefault(没找到使用默认值代替)

import java.util.HashMap;
import java.util.Map;

public class TestMap {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        //插入键值对
        map.put("1024","程序员节");
        map.put("大年初一", "春节");
        map.put("一月一日", "元旦节");
        //根据key查找val
        System.out.println(map.get("1024"));
        System.out.println(map.getOrDefault("正月十五", "元宵节"));
    }
}

3-2
判断是否包含key或val——containsKey,containsValue

import java.util.HashMap;
import java.util.Map;

public class TestMap {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        //插入键值对
        map.put("1024","程序员节");
        map.put("大年初一", "春节");
        map.put("一月一日", "元旦节");
        //是否包含key
        System.out.println(map.containsKey("1024"));//true
        System.out.println(map.containsKey("正月十五"));//false
        //是否包含val
        System.out.println(map.containsValue("春节"));//true
        System.out.println(map.containsValue("元宵节"));//false
    }
}

3-3
将全部键值对转换成集合—— entrySet()

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestMap {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        //插入键值对
        map.put("1024","程序员节");
        map.put("大年初一", "春节");
        map.put("一月一日", "元旦节");
        //全部键值对转集合
        Set<Map.Entry<String, String>> set = map.entrySet();
        for(Map.Entry<String, String> kv: set) {
            System.out.println("日期: " + kv.getKey() + " 节日: " + kv.getValue());
        }
    }
}

3-4
获取地图中键值对个数以及判断地图是否为空——size,isEmpty

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestMap {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        //插入键值对
        map.put("1024","程序员节");
        map.put("大年初一", "春节");
        map.put("一月一日", "元旦节");
        //获取键值对数目以及判断地图是否为空
        System.out.println(map.size());
        System.out.println(map.isEmpty());
    }
}

3-5
好了,本文到这里也该结束了,下次再见!


觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!

1-99

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *