Java学习笔记_24_Map接口

24.Map接口:

Map接口定义了存储“键(key)-值(value)映射对”的方法,Map中不能有重复的“键”,

Map实现类中储存的”键-值“映射对是通过键来唯一标识的,Map底层的”键“使用Set来存放的,

所以Map中的映射对的”键”对应的类必须重写hashCode()和equals()方法,

常用String作为Map的“键”。

 Map的添加、删除操作:

· Object put(Object key, Object value): 将相互关联的“键-值”存入该映像,如果该关键字已经存在,

那么与此关键字相关的新值将取代就值,否则返回null。

· Object remove(Object key): 根据指定的键,把“键-值”从Map中移除。

· void putAll(Map t): 将来自特定映像的所有元素添加到该映像。

· Void clear(): 从映像中删除所有的映像。

 Map中元素的查询操作:

· Object get(Object key): 获得与关键字key相关的值,并且返回与关键字key相关的对象,

如果未找到,返回null。

· boolean containsKey(Object key): 判断映像中是否存在关键字key。

· Boolean containsValue(Object value): 判断映像中是否存在value。

· int size(): 返回当前映像中的数量。

· boolean isEmpty(): 判断映像是否为空。

 Map中元素视图方法:

· Set keySet(): 返回映像中所有关键字的视图set集,同时还可以从视图中删除“键-值”对,

但不能添加“键-值”对。

· Collectio values(): 返回映像中所有值得视图集,同时还可以从视图中删除“键-值”对,

但不能添加“键-值”对。

· Set entrySet(): 返回映像中的“键-值”对,同时还可以以从视图中删除“键-值”对,

但不能添加“键-值”对。

1>实现类HashMap:

HashMap是使用频率最高的一个容器,它内部对“键”用Set进行三列存放,所以根据“键”去取“值”得效率高,

并且它允许使用null 值和null键,但不能保证映射的书序。

下面是HashMap相关用法的例子:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class HashMapTest {

	public static void main(String[] args) {
		// 声明一个HashMap对象
		HashMap<String, String> hmp = new HashMap<String, String>();

		// 向hmp中添加“key - value”对
		hmp.put("1", "d");
		hmp.put("0", "c");
		hmp.put("3", "a");
		hmp.put("2", "b");
		hmp.put("5", "e");
		hmp.put("4", "g");

		// 输出“key - value”对
		System.out.println("HashMap: \n<K, V>");
		System.out.println("\n显示“key-value”对: ");
		System.out.println(hmp);

		// 删除“key - value”对
		hmp.remove("3");
		hmp.remove("2");
		System.out.println("\n显示删除“key-value“后的”键-值“对: ");
		System.out.println(hmp);

		//由key获取value
		System.out.println("\n由key取得对应value: ");
		System.out.println("4=" + hmp.get("4"));

		// 获取全部键值,它的返回类型是Set
		Set<String> set = hmp.keySet();

		//判断是否存在关键字key
		System.out.println("\n判断是否存在指定key:");
		System.out.println("是否存在key7:" + hmp.containsKey("7"));

		//判断是否存在指定value
		System.out.println("\n判断是否存在指定value:");
		System.out.println("是否存在key4"+hmp.containsValue("g"));

		//判断容器是否为空
		System.out.println("\n容器是否为空:" + hmp.isEmpty());

		//输出容器的容量
		System.out.println("\n输出容器的容量:" + hmp.size());

		// 生成一个 迭代器
		Iterator<String> it = set.iterator();
		// 使用键生成的迭代器输出所有”键-值“对的值
		System.out.println("\n输出值: ");
		while (it.hasNext()) {
			System.out.print(hmp.get(it.next()) + ";");
		}
	}
}

输出结果:

HashMap:

<K, V>

显示“key-value”对:

{3=a, 2=b, 1=d, 0=c, 5=e, 4=g}

显示删除“key-value“后的”键-值“对:

{1=d, 0=c, 5=e, 4=g}

由key取得对应value:

4=g

判断是否存在指定key:

是否存在key7:false

判断是否存在指定value:

是否存在key4:true

容器是否为空:false

输出容器的容量:4

输出值:

d;c;e;g;

可以看出“键 - 值”对的输出顺序和输出的顺序是不同的。

2>实现类LinkedHashMap:

LilkedHashMap类是hashMap的子类,它可以依照插入的书序来排列元素,增、删、改效率比较高。

下面为LinkedHashMap的例子:

 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.Set;
 import java.util.Map;

 public class HashMapTest {

	public static void main(String[] args) {
		//声明一个LinkedHashMap对象
		Map<Integer, String> lhmp = newLinkedHashMap
   <Integer, String>();
		//想lhmp中添加“键 - 值”对
		lhmp.put(1, "a");
		lhmp.put(0, "c");
		lhmp.put(3, "a");
		lhmp.put(2, "b");
		//输出“键 - 值”对
		System.out.println("LinkedHashMap: \n<K, V>");
		System.out.println(lhmp);
		//获取全部键值,它的返回类型是Set
		Set<Integer> set = lhmp.keySet();
		//生成一个 迭代器
		Iterator<Integer> it = set.iterator();
		//使用键生成的迭代器输出所有”键-值“对的值
		System.out.println("<V>");
		while (it.hasNext()) {
			System.out.print(lhmp.get(it.next()) + ";");
		}
	}
 }

输出结果:

<K, V>

{1=a, 0=c, 3=a, 2=b}

<V>

a;c;a;b;

可以看出“键 - 值”的输入顺序和输出顺序是完全对应的。如果在映射中重新插入键,则插入书序不受影响。

3>实现类TreeMap:

存放入TreeMap中的“键 - 值”对的“键”必须是可排序的。

下面通过例子演示TreeMap的相关用法:

import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 public class TreeMapTest {
	public static void main(String[] args) {
		//声明一个TreeMap对象
		Map<String, String> tmp = new TreeMap<String, String>();
		//向lhmp中添加“键 - 值”对
		lhmp.put(1, "a");
		lhmp.put(0, "c");
		lhmp.put(3, "a");
		lhmp.put(2, "b");
		//输出“键 - 值”对
        System.out.println("TreeMap: \n<K, V>");
        System.out.println(tmp);
       System.out.println("输出容器的大小: " + tmp.size());
		//获取全部键值,它的返回类型是Set
		Set<String> set = tmp.keySet();
		//生成一个 迭代器
		Iterator<String> it = set.iterator();
		//使用键生成的迭代器输出所有”键-值“对的值
		System.out.println("<V>");
		while (it.hasNext()) {
			System.out.print(tmp.get(it.next()) + ";");
		}
	}
 }

输出结果:

LinkedHashMap:

<K, V>

{0=c, 1=a, 2=b, 3=a}

输出容器的大小: 4

<V>

c;a;b;a;

在TreeMap中“键”必须是可排序的,在内部存储时会按“键”的序列存储,输出相同。

4>实现类Properties:

Properties类表示了持久的属性集,它可以保存在流中或从流中加载。且其存放的“键 - 值”对都是字符串,

在存取时应使用setProperties(String key, String value)方法和getProperty(String key)方法。

下面是Properties类的演示例子:

 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;

 public class TreeMapTest {

	public static void main(String[] args) {
         //获取文件并读入到输入流
		InputStream is = (InputStream) Thread.currentThread()
				.getContextClassLoader()
				.getResourceAsStream("config.properties");
		// 创建属性集对象
		Properties prop = new Properties();
		try {
			// 从流中加载数据
			prop.load(is);
		} catch (IOException e) {
			e.printStackTrace();
		}
        // 获取name属性
		String name = prop.getProperty("name");
		System.out.println("name = " + name);
		//获取password属性
		String pwd = prop.getProperty("password");
		System.out.println("password = " + pwd);
	}
 } 

输出结果:

name = spilit

password = abc123

在src中建立Fiel文档config.properties:

#Key=value

name=spilit

password=abc123

Java学习笔记_24_Map接口

时间: 2024-12-21 19:21:20

Java学习笔记_24_Map接口的相关文章

Java学习笔记之接口

一.接口的概念与定义 首先考虑一个简单的接口的定义: public interface Output { int MAX_LINE = 40; void out(); void getData(String msg); } 定义接口使用关键字interface 修饰符interface前面的public可以省略,如果省略,则采用默认访问控制,即只有在相同包结构的代码才可以访问此接口 接口不可以有构造方法(区别于类中的构造方法) 接口里面的所有成员,包括常量.方法等都是public访问权限,所以在

Java学习笔记_23_List接口实现类

23.List接口实现类: List接口继承了Collection接口,它是一个允许存在重复项的有序集合. 1>实现类ArrayList: ArrayList类支持可随需要而增长的动态数组.数组列表以一个原大小被创建,当超过了它的大小, 类集自动增大,当对象被删除后,数组就可以缩小. 优点:ArrayList类对于使用索引取出元素用较高的效率,他可以用索引快速定位对象. 缺点:ArrayList类对于元素的删除或插入速度较慢. 构造方法: · ArrayList(): 构造一个初始容量为10的空

Java学习笔记_21_Collection接口

21.Collection接口: 1>容器类的添加.删除: · add(Object o) :将对象添加到集合. · Remove(Object o) :删除集合中与o相匹配的对象. 2>容器中类的查询: · Size(): 返回集合中元素的个数. · isEmpty(): 判断集合中是否包含元素. · contains(Object o): 判断集合中是否包含指定元素. · iterator(): 返回集合的一个迭代器,用来访问该集合的元素. · contains(Collection c)

Java学习笔记_22_Set接口的实现类

22.Set接口的实现类: Set接口存放的元素是无序的且不包括反复元素. 1>实现类HashSet: HashSet类依据元素的哈希码进行存放,取出时也能够依据哈希码高速找到.HashSet不保存元素的加入的顺序. 样例: import java.util.HashSet; import java.util.Iterator; public class Student { public static void main(String[] args) { HashSet<String>

Java学习笔记之接口和抽象类

接口(interface)1.interface创建一个接口,implements实现接口 interface jiekou{} class lie implements jiekou{}2.接口可以有属性,但必须赋值,不建议在接口定义属性(可用于定义常量)3.接口,可以定义与接口同名的方法4.接口的所有方法都没有方法体 interface jiekou{void a();} 5.接口定义的方法的权限修饰默认是public,实现接口的类重写其方法时,必须显示声明public修饰:6.实现接口的类

java学习笔记10--泛型总结

java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note10.html,转载

java学习笔记8--接口总结

接着前面的学习: java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note8.html,转载请注明源地址. 生活中的接口: 什么是接口? 一个Java接口是一些方法特

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

【Java学习笔记之二十六】深入理解Java匿名内部类

在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者