Java 集合简介(Map接口)

在Map接口定义有如下常用方法:

No.

方法名称

类型

描述

1

public V put(K key,V value)

普通

向集合保存数据

2

public V get(Object key)

普通

根据key超找对应value数据

3

public Set<Map.Entry<K,V>>entrySet()

普通

将Map集合转化为Set集合

4

public Set<K>keySet()

普通

取出全部key

在Map接口有两个常用子类:HashMap、Hashtable

范例:观察HashMap的使用

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

public class Demo {
	public static void main(String[] args) throws Exception {
		Map<String, Integer> map = new HashMap<>();
		map.put("壹", 1);
		map.put("贰", 2);
		map.put("叄", 3);
		map.put("叄", 33);
		System.out.println(map);
	}
}

PS:结果发现使用HashMap定义是无需存放;如果有重复的Key会进行覆盖,新的内容替换掉旧的内容 

============分割线============

范例:查询操作

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

public class Demo {
	public static void main(String[] args) throws Exception {
		Map<String, Integer> map = new HashMap<>();
		map.put("壹", 1);
		map.put("贰", 2);
		map.put("叄", 3);
		map.put(null, 0);
		System.out.println(map.get("壹"));
		System.out.println(map.get("陸"));
		System.out.println(map.get("null"));

	}
}

============分割线============

范例:取得所有的key值

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

public class Demo {
	public static void main(String[] args) throws Exception {
		Map<String, Integer> map = new HashMap<>();
		map.put("壹", 1);
		map.put("贰", 2);
		map.put("叄", 3);
		map.put(null, 0);
		Set<String> all = map.keySet();
		Iterator<String> iter = all.iterator();
		while (iter.hasNext()) {
			System.out.println(iter.next());
		}

	}
}

============分割线============

范例:使用Hashtable(key和value都不允许为null)

import java.util.Hashtable;
import java.util.Map;

public class Demo {
	public static void main(String[] args) throws Exception {
		Map<String, Integer> map = new Hashtable<>();
		map.put("壹", 1);
		map.put("贰", 2);
		map.put("叄", 3);		
		System.out.println(map);
	}
}

============分割线============

HashMap与Hashtable区别

No.

区别

HashMap

Hashtable

1

推出时间

JDK1.2

JDK1.0

2

性能

异步处理

同步处理

3

数据安全

非线程安全

线程安全

4

设置null

允许key和value为null

不允许设置null

============分割线============

Iterator输出Map

使用put(K key,V value)时候,实际将数据自动封装为Map.Entry<K,V>对象。

Map.Entry<K,V>接口定义的两个操作:

·取得key : public K getKey();

·取得value : public V getValue();

范例:

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

public class Demo {
	public static void main(String[] args) throws Exception {
		Map<String, Integer> map = new Hashtable<>();
		map.put("壹", 1);
		map.put("贰", 2);
		map.put("叄", 3);
		// 将Map集合转化为Set集合,方便使用Iterator输出
		Set<Map.Entry<String, Integer>> set = map.entrySet();
		Iterator<Map.Entry<String, Integer>> iter = set.iterator();
		while (iter.hasNext()) {
			Map.Entry<String, Integer> data = iter.next();
			System.out.println(data.getKey() + "->" + data.getValue());
		}
	}
}

============分割线============

范例:

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

class Book {
	private String title;
	private double price;

	public Book(String title, double price) {
		this.title = title;
		this.price = price;
	}

	@Override
	public String toString() {
		return "书名:《" + this.title + "》,价格:" + this.price + "元。";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		long temp;
		temp = Double.doubleToLongBits(price);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		result = prime * result + ((title == null) ? 0 : title.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Book other = (Book) obj;
		if (Double.doubleToLongBits(price) != Double.doubleToLongBits(other.price))
			return false;
		if (title == null) {
			if (other.title != null)
				return false;
		} else if (!title.equals(other.title))
			return false;
		return true;
	}

}

public class MapDemo03 {
	public static void main(String[] args) {
		Map<Book, String> all = new Hashtable<>();
		all.put(new Book("Java", 88.6), "JAVA");
		all.put(new Book("Oracle", 79.6), "Oracle");
		all.put(new Book("JSP", 88.6), "JSP");
		Set<Map.Entry<Book, String>> set = all.entrySet();
		Iterator<Map.Entry<Book, String>> iter = set.iterator();
		while (iter.hasNext()) {
			Map.Entry<Book, String> me = iter.next();
			System.out.println(me.getKey() + "->" + me.getValue());
		}
	}

}



总结:

1、Map集合保存数据是为了方便查询,Collection保存数据是为了方便输出;

2、Map使用Iterator接口输出的步骤以及代码;

3、HashMap可以保存null,key重复会出现覆盖。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值