学习笔记十七:Java之集合(三)

只有创造,才是真正的享受,只有拚搏,才是充实的生活。


本讲内容:Map结构的集合类:HashMap类、Hashtable类


Map是个接口,它关心的是映射关系,它里面的元素是成对出现的,键和值都是对象且键必须保持唯一。这一点上看它和Collection是很不相同的。Map接口的常用方法如下:

put(K key, V value)向集合中添加指定的键值对
putAll(Map <? extends K,? extends V> t)把一个Map中的所有键值对添加到该集合
containsKey(Object key)如果包含该键,则返回true
containsValue(Object value)如果包含该值,则返回true
get(Object key) 根据键,返回相应的值对象
keySet()将该集合中的所有键以Set集合形式返回
values()将该集合中所有的值以Collection形式返回
remove(Object key)如果存在指定的键,则移除该键值对,返回键所对应的值,如果不存在则返回null
clear()移除Map中的所有键值对,或者说就是清空集合
isEmpty()查看Map中是否存在键值对
size()查看集合中包含键值对的个数,返回int类型
因为Map中的键必须是唯一的(覆盖上一个),所以虽然键可以是null,只能由一个键是null,而Map中的值可没有这种限制,值为null的情况经常出现,因此get(Object key)方法返回null,有两种情况一种是确实不存在该键值对,二是该键对应的值对象为null。为了确保某Map中确实有某个键,应该使用的方法是 containsKey(Object key) 。


一、HashMap
HashMap是最常用的Map集合,它的键值对在存储时要根据键的哈希码来确定值放在哪里。

查找速度比ArrayList类快,并且不重复。

package a;
import java.util.*;
public class Text {
	public static void main(String[] args) {
		HashMap hm=new HashMap();
		Student stu1=new Student("1","惠琳","90");
		Student stu2=new Student("2","丹妹","100");
		Student stu3=new Student("3","开妥","60");
		hm.put("001", stu1);
		hm.put("002", stu2);//键值
		hm.put("002", stu3);//复盖
		/*if(hm.containsKey("002")){//查询
			System.out.println("该学生信息为:");
			Student stu=(Student)hm.get("002");
			System.out.println("编号:"+stu.getOn()+"\t名称:"+stu.getName()+"\t分数:"+stu.getScore());
		}else{
			System.out.println("对不起,没有该学生");
		}*/
		Iterator a=hm.keySet().iterator();//遍历  Iterator 迭代   hasNext有没有下一个返回一个boolean
		while(a.hasNext()){
			String key=a.next().toString();
			Student b=(Student)hm.get(key);
			System.out.println("编号:"+b.getOn()+"\t名称:"+b.getName()+"\t价格:"+b.getScore());
		}
	}
}

class Student {
	private String on;
	private String name;
	private String score;
	public String getOn() {
		return on;
	}
	public void setOn(String on) {
		this.on = on;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getScore() {
		return score;
	}
	public void setScore(String score) {
		this.score = score;
	}
	
	public Student(String on,String name,String score) {
		this.on=on;
		this.name=name;
		this.score=score;
	}
}


二、 HashMap与Hashtable的区别

HashMap与Hashtable都是java的集合类,都可以用来存放java对象,这也是它们的相同点,但它们也有区别:

1、历史原因:

Hashtable是基于陈旧的Dictionary类的,HashMap是java1.2引进的Map接口的一个实现。

2、同步性:

Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,而HashMap是异步的,因此HashMap中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程集合那么使用HashMap是一个很好的的选择,这样可以避免由于同步带来的不必要的性能开销。从而提高效率。

3、值:

HashMap可以让你将空值作为一个表的条目的key或valeu,但是Hashtable是不能放入空值的。


三、总结

1、如果需要线程安全,使用Vector、Hashtable。

2、如果不需要线程安全,使用ArrayList、LinkedList、HashMap。

3、如果要求键值对,使用HashMap、Hashtable。

4、如果数据量大而且需要线程安全考虑Vector


本讲就到这里,Take your time and enjoy it

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值