Java中具有映射关系的容器:数组和Map的区别说明

映射就意味着有两部分;

存储映射关系的容器是数组和Map集合;

区别:

(1)当映射关系中的一方是有序编号时,这个时候要想到数组这种结构;

(2)Map不一定需要有序编号,它只能建立对象之间的关系;

(3)如果映射的两方没有任何一方是有序的编号,就不能想数组了,这时应该用集合中具备映射关系的容器Map。

注意:

(1)Map中键相同时,键值会被覆盖;

(2)Map中一个Key可以对应一个集合,因为集合也是一个对象,集合也能往集合中放。

(3)Map<int,char>这样写是不正确的,因为,泛型中定义的必须是引用数据类型,所以,要找int和char的对象的包装类即Map<Integer,Character>

补充知识:Java基础:集合(容器)—Collection和Map两大体系介绍和用法

集合类的作用

集合类也叫做容器类,和数组一样,用于存储数据,但数组类型单一,并且长度固定,限制性很大,而集合类可以动态增加长度。

集合存储的元素都是对象(引用地址),所以集合可以存储不同的数据类型,但如果是需要比较元素来排序的集合,则需要类型一致。

集合中提供了统一的增删改查方法,使用方便。

支持泛型,避免数据不一致和转换异常,还对常用的数据结构进行了封装。

集合框架体系的组成

集合框架体系是由Collection、Map(映射关系)和Iterator(迭代器)组成,各部分的作用如下所示。

Collection体系中有三种集合:Set、List、Queue

Set(集): 元素是无序的且不可重复。

List(列表):元素是有序的且可重复。

Queue(队列):封装了数据结构中的队列。

Map体系

Map用于保存具有映射关系的数据,即key-value(键值对)。Map集合的key是唯一的,不可重复,而value可以重复。所以一个value可以对应多个key。

Map体系除了常用类之外,还有Properties(属性类)也属于Map体系。

Iterator(迭代器)

基本功能就是遍历集合中的所有元素,除了List集合有一个独有的迭代器Listiterator,别的集合类都是一样的。

每个集合类都有iterator(),调用该方法就能得到迭代器对象。

如果List集合使用迭代器,建议使用ListIterator,比原有的迭代器多了一些方法。

除了使用迭代器遍历集合元素,也可以使用加强for和Java8的foreach()方法。如果是List集合,使用for循环也能做到。

Collection接口方法

Collection是Set、List和Queue接口的父接口,Set、List、Queue的子类都能使用如下方法。

boolean add(E e)_______________________________添加指定元素
boolean addAll(Collection c)___________________将指定集合中所有元素都添加到此 collection
boolean contains(Object o)_____________________集合中是否包含了指定元素
boolean containsAll(Collection<?> c)___________该集合是否包含指定集合中所有元素
boolean remove(Object o)_______________________移除指定元素
boolean removeAll(Collection<?> c)_____________移除指定的collection参数的所有元素
void clear()___________________________________清除集合中所有元素
boolean retainAll(Collection<?> c)_____________保留指定Collection参数中元素,是两个集合的元素交集
boolean equals(Object o)_______________________比较此 collection 与指定对象是否相等
boolean isEmpty()______________________________判断该集合是否为空
Iterator<E> iterator()_________________________返回此 collection 的迭代器,用来遍历元素
int hashCode()_________________________________返回集合的哈希码值
int size()_____________________________________返回此 collection 中的元素数
Object[] toArray()_____________________________返回一个包含该Collection所有元素的对象数组
<T> T[] toArray(T[] a)_________________________返回一个包含该Collection所有元素的数组,数组类型和指定数组的类型一致

Map接口方法

boolean containsKey(Object key)________________该映射是否包含指定键值
 boolean containsValue(Object value)____________如果该键值对中有一个或多个key射到指定值,则返回 true
 Set<Map.Entry<K,V>> entrySet()_________________返回此映射中包含的映射关系的 Set 视图。
 Set<K> keySet()________________________________返回此映射中所有键的 Set 视图。
 Collection<V> values()_________________________返回一个此映射中包含的值的 Collection
 V get(Object key)______________________________返回指定键映射的值。如果不存在,则返回 null
 V put(K key, V value)__________________________放入一个键值对(key-value)
 void putAll(Map<? extends K,? extends V> m)____把指定映射的所有映射关系复制到此映射中
 boolean isEmpty()______________________________如果此映射未包含键值映射关系,则返回 true
 boolean equals(Object o)_______________________比较指定的对象与此映射是否相等
 int size()_____________________________________返回此映射中的键-值映射关系数
 int hashCode()_________________________________返回此映射的哈希码值

以上这篇Java中具有映射关系的容器:数组和Map的区别说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈Java中Map和Set之间的关系(及Map.Entry)

    1.通过查找API文档: 2.Map.Entry是一个接口,所以不能直接实例化. 3.Map.entrySet( )返回的是一个collection集合,并且,这个collection中的元素是Map.Entry类型,如下图所示: 4. Map是Java中的接口,Map.Entry是Map的一个内部接口.java.util.Map.Entry接口主要就是在遍历map的时候用到. Map提供了一些常用方法,如keySet().entrySet()等方法,keySet()方法返回值是Map中key值

  • 详解Java 信号量Semaphore

    Semaphore也是一个同步器,和前面两篇说的CountDownLatch和CyclicBarrier不同,这是递增的,初始化的时候可以指定一个值,但是不需要知道需要同步的线程个数,只需要在同步的地方调用acquire方法时指定需要同步的线程个数: 一.简单使用 同步两个子线程,只有其中两个子线程执行完毕,主线程才会执行: package com.example.demo.study; import java.util.concurrent.ExecutorService; import ja

  • 关于Java HashMap自动排序的简单剖析

    1.HashMap概述 HashMap是无序的,这里无序的意思是你取出数据的顺序与你存入数据的顺序不同 2.发现问题 当尝试向HashMap中存入int类型的key,可以看到在输出的时候会自动排序 HashMap<Integer, String> map = new HashMap<>(); map.put(3, "asdf"); map.put(2, "asdf"); map.put(1, "asdf"); map.pu

  • Java使用entrySet方法获取Map集合中的元素

    本文为大家分享了使用entrySet方法获取Map集合中元素的具体代码,供大家参考,具体内容如下 /*--------------------------------- 使用entrySet方法取出Map集合中的元素: ....该方法是将Map集合中key与value的关系存入到了Set集合中,这个关系的数据类型是Map.Entry ....entrySet方法返回值类型的具体写法为:Set< Map.Entry<KeyType , ValueType> > -----------

  • Java中Map的entrySet()使用说明

    由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系. Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value Map.Entry里面包含getKey()和getValue()方法 Set<Entry<T,V>> entrySet() 该方法返回值就是这个map中各个键值对映射关系的集合. 可使用它对map进行遍历. Iterator<Map.Entry<Integer, Integer>> it=map.entrySet

  • Java HashMap源码及并发环境常见问题解决

    HashMap源码简单分析: 1 一切需要从HashMap属性字段说起: /** The default initial capacity - MUST be a power of two. 初始容量 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** * The maximum capacity, used if a higher value is implicitly specified * by eit

  • Java使用ObjectMapper的简单示例

    一.什么是ObjectMapper? ObjectMapper类是Jackson库的主要类,它提供一些功能将数据集或对象转换的实现. 它将使用JsonParser和JsonGenerator实例来实现JSON的实际读/写. 二.ObjectMapper怎么使用? 2.1 配置 2.1.1 普通Java项目(引入如下依赖即可) <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --

  • Java中具有映射关系的容器:数组和Map的区别说明

    映射就意味着有两部分: 存储映射关系的容器是数组和Map集合: 区别: (1)当映射关系中的一方是有序编号时,这个时候要想到数组这种结构: (2)Map不一定需要有序编号,它只能建立对象之间的关系: (3)如果映射的两方没有任何一方是有序的编号,就不能想数组了,这时应该用集合中具备映射关系的容器Map. 注意: (1)Map中键相同时,键值会被覆盖: (2)Map中一个Key可以对应一个集合,因为集合也是一个对象,集合也能往集合中放. (3)Map<int,char>这样写是不正确的,因为,泛

  • Java中增强for循环在一维数组和二维数组中的使用方法

    一维数组: int[] a={1,2,3}; for(int i:a) { System.out.print(i+" "); } 输出:1 2 3 二维数组: import java.util.Scanner; public class tet { public static void main(String[] args) { //int[][] b={{1,2,3},{4,5,6}};行 int[][] a=new int[5][];//必须明确行数 for(int i=0;i&l

  • 将java中的 string 类型转成 数组案例

    这个要看你的具体需求了.如果是有分隔符的那种例如"a,b,c";就直接分割就行了. String string = "a,b,c"; String [] stringArr= string.split(","); //注意分隔符是需要转译滴... 如果是"abc"这种字符串,就直接 String string = "abc" ; char [] stringArr = string.toCharArray(

  • 浅谈Java中常用数据结构的实现类 Collection和Map

    线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类. Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection接口 Collection是最基本的集合接口,一个C

  • java中对象的比较equal、Comparble、Comparator的区别

    目录 关于对象值相等的比较 三种比较风格 覆写基类的equal 关于对象值大于.等于.小于的比较–基于自然顺序(按照<小于号的形式) 基于Comparble接口类的比较 关于对象值大于.等于.小于的比较-- 基于比较器比较 基于Comparator接口类的比较 三种比较方式对比 关于对象值相等的比较 三种比较风格 比较身份:==,通过等号来比较身份 比较值:通过使用equals方法,它是Object这个祖宗类所提供的的一个方法,也可以自己写个类,重写equals,自定制比较值的规则. 这里的eq

  • Java中的private、protected、public和default的区别(详解)

    (1)对于public修饰符,它具有最大的访问权限,可以访问任何一个在CLASSPATH下的类.接口.异常等.它往往用于对外的情况,也就是对象或类对外的一种接口的形式. (2)对于protected修饰符,它主要的作用就是用来保护子类的.它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西. (3)对于default来说,有点的时候也成为friendly(友员),它是针对本包访问而设计的,任何处于本包下的类.接口.异常等,都可以相互访问,即使是父类没有用prote

  • Java中List<T>和List<?>的区别详解

    一.简介 <T>在List.Set.Map中经常见到,用来限制Class中的参数类型,确保Class中参数的一致性.例如:List<String> list = new ArrayList<>();创建了一个内部参数是String类型的类,list中的操作对象都是String.<?>代表任意java类型,只有在不关心数据的具体类型下才使用通配符表示,但在一些情况下,需要将<?>传入的数据进行强转,但这样不如直接传入<T>. 另外除了&

  • 详解Java中super的几种用法并与this的区别

    1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 复制代码 代码如下: class Base { Base() { System.out.println("Base"); } } public class Checket extends Base { Checket() { super();//调用父类的构造方法,一定要放在方法的首个语句 System.out.println("Checket"); } public static voi

  • Java中使用Thread类和Runnable接口实现多线程的区别

    使用Thread类和Runnable接口实现多线程的区别 先看两种实现方式的步骤: public class ThreadDemo{ public static void main(String[] args) { for (int i = 0; i < 5; i++) { //创建并启动由继承Thread类创建的线程 new Thread(new MyThread(),"Thread"+i).start(); //创建并启动由实现Runnable接口创建的线程 new Thre

  • Java中数组的定义与使用

    目录 一.数组的基本用法 1.什么是数组 2.创建数组 3.数组的使用 二.数据作为方法参数 1.基本用法 2.理解引用类型 3.认识null 4.JVM内存区域划分 5.数组作为方法的返回值 6.关于数组的地址 四.数组练习 1.数组转字符串 2.数组拷贝 五.二维数组 1.二维数组的语法 2.二维数组的结构 3.用for-each遍历二维数组 总结 一.数组的基本用法 1.什么是数组 数组本质上就是让我们能 "批量" 创建相同类型的变量. 如果我们需要创建多个同一个类型的变量,则不

随机推荐