Java中的映射接口

地图界面出现在 JAVAutil 包表示键和值之间的映射。映射接口不是 收集接口 。因此,它的行为与其他集合类型略有不同。地图包含唯一的键。

null

极客们,脑力激荡者应该 为什么以及何时使用地图?

映射非常适合用于键值关联映射,如字典。这些映射用于按键执行查找,或者在有人希望按键检索和更新元素时执行查找。一些常见的情况如下:

  • 错误代码及其描述的地图。
  • 邮政编码和城市地图。
  • 经理和员工的地图。每个经理(关键)都与他管理的员工(价值)列表相关联。
  • 一张班级和学生的地图。每个类(键)都与一个学生列表(值)相关联。

Map in Java

创建地图对象

因为地图是一个 界面 ,无法创建映射类型的对象。为了创建一个对象,我们总是需要一个扩展这个映射的类。而且,在引入 仿制药 在Java1.5中,可以限制可以存储在地图中的对象的类型。

语法: 定义类型安全映射

Map hm = new HashMap(); // Obj is the type of the object to be stored in Map

地图界面的特征

  1. 映射不能包含重复的键,每个键最多只能映射到一个值。一些实现允许空键和空值,比如 哈希图 LinkedHashMap ,但有些人不喜欢 树图 .
  2. 映射的顺序取决于具体的实现。例如 树图 LinkedHashMap 有可预测的订单,而 哈希图 没有。
  3. 有两个接口用于在java中实现Map。它们是地图和地图 分类地图 ,以及三个类:HashMap、TreeMap和LinkedHashMap。

地图界面中的方法

方法 执行的动作
清除() 此方法用于清除和删除指定映射集合中的所有元素或映射。
康纳斯基(对象) 此方法用于检查特定密钥是否映射到映射中。它将key元素作为参数,如果该元素映射到映射中,则返回True。
containsValue(对象) 此方法用于检查特定值是否由映射中的单个键或多个键映射。它将该值作为参数,如果该值由映射中的任何键映射,则返回True。
入口集() 此方法用于创建地图中包含的相同元素的集合。它基本上返回地图的集合视图,或者我们可以创建一个新集合,并将地图元素存储到其中。
相等(对象) 此方法用于检查两个贴图之间是否相等。它验证作为参数传递的一个映射的元素是否等于此映射的元素。
获取(对象) 此方法用于检索或获取由参数中提到的特定键映射的值。当映射不包含密钥的此类映射时,它返回NULL。
hashCode() 此方法用于为包含键和值的给定映射生成哈希代码。
isEmpty() 此方法用于检查地图是否有任何键和值对条目。如果不存在映射,则返回true。
键集() 此方法用于返回此地图中包含的键的集合视图。集合由映射支持,因此对映射的更改会反映在集合中,反之亦然。
放置(物体,物体) 此方法用于将指定值与此映射中的指定键相关联。
putAll(地图) 此方法用于将指定映射中的所有映射复制到此映射。
移除(对象) 此方法用于从映射中删除密钥的映射(如果密钥存在于映射中)。
大小() 此方法用于返回映射中可用的键/值对的数量。
价值观() 此方法用于根据地图的值创建集合。它基本上返回HashMap中值的集合视图。
getOrDefault(对象键,V默认值) 返回指定键映射到的值,如果此映射不包含该键的映射,则返回defaultValue。
合并(K键、V值、双函数重新映射函数) 如果指定的键尚未与值关联或与null关联,则将其与给定的非null值关联。
putIfAbsent(K键,V值) 如果指定的键尚未与值关联(或映射为null),则将其与给定值关联并返回null,否则返回CurAssociatent值。

例子:

JAVA

// Java Program to Demonstrate
// Working of Map interface
// Importing required classes
import java.util.*;
// Main class
class GFG {
// Main driver method
public static void main(String args[])
{
// Creating an empty HashMap
Map<String, Integer> hm
= new HashMap<String, Integer>();
// Inserting pairs in above Map
// using put() method
hm.put( "a" , new Integer( 100 ));
hm.put( "b" , new Integer( 200 ));
hm.put( "c" , new Integer( 300 ));
hm.put( "d" , new Integer( 400 ));
// Traversing through Map using for-each loop
for (Map.Entry<String, Integer> me :
hm.entrySet()) {
// Printing keys
System.out.print(me.getKey() + ":" );
System.out.println(me.getValue());
}
}
}


输出:

a:100b:200c:300d:400

实现Map接口的类在下面的媒体中描述,并在后面描述如下:

图片[2]-Java中的映射接口-yiteyi-C++库

第一类: 哈希图

HashMap是自Java1.2以来Java集合的一部分。它提供了Java映射接口的基本实现。它以(键、值)对的形式存储数据。要访问某个值,必须知道其密钥。这个类使用一种叫做 散列 .哈希是一种将大字符串转换为代表同一字符串的小字符串的技术。较短的值有助于索引和更快的搜索。让我们看看如何使用这个类创建一个map对象。

实例

JAVA

// Java Program to illustrate the Hashmap Class
// Importing required classes
import java.util.*;
// Main class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty HashMap
Map<String, Integer> map = new HashMap<>();
// Inserting entries in the Map
// using put() method
map.put( "vishal" , 10 );
map.put( "sachin" , 30 );
map.put( "vaibhav" , 20 );
// Iterating over Map
for (Map.Entry<String, Integer> e : map.entrySet())
// Printing key-value pairs
System.out.println(e.getKey() + " "
+ e.getValue());
}
}


输出

vaibhav 20vishal 10sachin 30

第二类: LinkedHashMap

LinkedHashMap与HashMap类似,它还有一个额外的功能,即维护插入元素的顺序。HashMap提供了快速插入、搜索和删除的优势,但它从未保持LinkedHashMap提供的插入轨迹和顺序,在这些位置可以按插入顺序访问元素。让我们看看如何使用这个类创建一个map对象。

实例

JAVA

// Java Program to Illustrate the LinkedHashmap Class
// Importing required classes
import java.util.*;
// Main class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty LinkedHashMap
Map<String, Integer> map = new LinkedHashMap<>();
// Inserting pair entries in above Map
// using put() method
map.put( "vishal" , 10 );
map.put( "sachin" , 30 );
map.put( "vaibhav" , 20 );
// Iterating over Map
for (Map.Entry<String, Integer> e : map.entrySet())
// Printing ket-value pairs
System.out.println(e.getKey() + " "
+ e.getValue());
}
}


输出:

vishal 10sachin 30vaibhav 20

第三类: 树图

Java中的TreeMap用于实现Map接口和NavigableMap以及抽象类。映射根据其键的自然顺序进行排序,或者由映射创建时提供的比较器进行排序,具体取决于使用的构造函数。这被证明是排序和存储键值对的有效方法。树映射维护的存储顺序必须与equals保持一致,就像任何其他排序映射一样,无论显式比较器如何。让我们看看如何使用这个类创建一个map对象。

实例

JAVA

// Java Program to Illustrate TreeMap Class
// Importing required classes
import java.util.*;
// Main class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty TreeMap
Map<String, Integer> map = new TreeMap<>();
// Inserting custom elements in the Map
// using put() method
map.put( "vishal" , 10 );
map.put( "sachin" , 30 );
map.put( "vaibhav" , 20 );
// Iterating over Map using for each loop
for (Map.Entry<String, Integer> e : map.entrySet())
// Printing key-value pairs
System.out.println(e.getKey() + " "
+ e.getValue());
}
}


输出:

sachin 30vaibhav 20vishal 10

使用 地图界面 HashMap类

因为Map是一个接口,所以它只能与实现该接口的类一起使用。现在,让我们看看如何使用广泛使用的 HashMap类 .而且,在引入 仿制药 在Java1.5中,可以限制可以存储在地图中的对象的类型。

操作1: 添加元素

为了向地图添加元素,我们可以使用 put()方法 。但是,hashmap中不会保留插入顺序。在内部,对于每个元素,都会生成一个单独的散列,并基于该散列对元素进行索引,以提高效率。

实例

JAVA

// Java program to demonstrate
// the working of Map interface
import java.util.*;
class GFG {
public static void main(String args[])
{
// Default Initialization of a
// Map
Map<Integer, String> hm1 = new HashMap<>();
// Initialization of a Map
// using Generics
Map<Integer, String> hm2
= new HashMap<Integer, String>();
// Inserting the Elements
hm1.put( 1 , "Geeks" );
hm1.put( 2 , "For" );
hm1.put( 3 , "Geeks" );
hm2.put( new Integer( 1 ), "Geeks" );
hm2.put( new Integer( 2 ), "For" );
hm2.put( new Integer( 3 ), "Geeks" );
System.out.println(hm1);
System.out.println(hm2);
}
}


输出:

{1=Geeks, 2=For, 3=Geeks}{1=Geeks, 2=For, 3=Geeks}

操作2: 变化元素

在添加元素之后,如果我们希望更改元素,可以通过再次添加带有 put()方法。 由于映射中的元素是使用键进行索引的,因此只需插入我们希望更改的键的更新值,就可以更改键的值。

实例

JAVA

// Java program to demonstrate
// the working of Map interface
import java.util.*;
class GFG {
public static void main(String args[])
{
// Initialization of a Map
// using Generics
Map<Integer, String> hm1
= new HashMap<Integer, String>();
// Inserting the Elements
hm1.put( new Integer( 1 ), "Geeks" );
hm1.put( new Integer( 2 ), "Geeks" );
hm1.put( new Integer( 3 ), "Geeks" );
System.out.println( "Initial Map " + hm1);
hm1.put( new Integer( 2 ), "For" );
System.out.println( "Updated Map " + hm1);
}
}


输出:

Initial Map {1=Geeks, 2=Geeks, 3=Geeks}Updated Map {1=Geeks, 2=For, 3=Geeks}

操作3: 移除元素

为了从地图中删除元素,我们可以使用 remove()方法 。此方法获取密钥值,并从该映射中删除密钥的映射(如果该映射存在于映射中)。

实例

JAVA

// Java program to demonstrate
// the working of Map interface
import java.util.*;
class GFG {
public static void main(String args[])
{
// Initialization of a Map
// using Generics
Map<Integer, String> hm1
= new HashMap<Integer, String>();
// Inserting the Elements
hm1.put( new Integer( 1 ), "Geeks" );
hm1.put( new Integer( 2 ), "For" );
hm1.put( new Integer( 3 ), "Geeks" );
hm1.put( new Integer( 4 ), "For" );
// Initial Map
System.out.println(hm1);
hm1.remove( new Integer( 4 ));
// Final Map
System.out.println(hm1);
}
}


输出:

{1=Geeks, 2=For, 3=Geeks, 4=For}{1=Geeks, 2=For, 3=Geeks}

操作4: 在地图上迭代

有多种方法可以遍历地图。最著名的方法是使用for each循环并获取密钥。键的值是通过使用getValue()方法找到的。

实例

JAVA

// Java program to demonstrate
// the working of Map interface
import java.util.*;
class GFG {
public static void main(String args[])
{
// Initialization of a Map
// using Generics
Map<Integer, String> hm1
= new HashMap<Integer, String>();
// Inserting the Elements
hm1.put( new Integer( 1 ), "Geeks" );
hm1.put( new Integer( 2 ), "For" );
hm1.put( new Integer( 3 ), "Geeks" );
for (Map.Entry mapElement : hm1.entrySet()) {
int key
= ( int )mapElement.getKey();
// Finding the value
String value
= (String)mapElement.getValue();
System.out.println(key + " : "
+ value);
}
}
}


输出:

1 : Geeks2 : For3 : Geeks

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享