黑马程序员---JAVA基础---泛型与Map集合(十)

 

 ---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

 

一、泛型(JDK1.5以后出现了泛型)泛型:用于解决安全问题是一个安全机制。

1、 泛型格式:通过<>来定义要操作的引用数据类型。

2、 好处:

(1)将运行时出现的ClassCastException转移到了编译时期。方便程序员解决问题,让运行时期问题减少,安全。

(2)避免了强制转换的麻烦。

3、在使用java提供的对象时,什么时候使用泛型呢?

通常在集合框架中很常见,只要见到<>就要定义泛型。其中<>就是用来接受类型的。当使用集合时,将集合中的要存储的类型作为参数传递到<>中即可。

例如:

 

class Demo{
	public  void show(T t)
	{
		System.out.println("show:"+t);
	}
	publicvoid print(Q q)
	{
		System.out.println("print:"+q);
	}
	public  staticvoid method(W t)
	{
		System.out.println("method:"+t);
	}
}
class GenericDemo4 
{
	public static void main(String[] args) 
	{
		Demod = new Demo();
		d.show("haha");
		//d.show(4);
		d.print(5);
		d.print("hehe");

		Demo.method("hahahahha");

		/*
		Demo d = new Demo();
		d.show("haha");
		d.show(new Integer(4));
		d.print("heihei");
		*/
		/*
		Demod = new Demo();

		d.show(new Integer(4));
		d.print("hah");

		Demod1 = new Demo();
		d1.print("haha");
		d1.show(5);
		*/
	}
}
 
  

《注意》静态方法不可以访问类上定义的泛型。如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
4、泛型限定:? 通配符。也可以理解为占位符。
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限。

二、Map集合
Map集合:该集合存储键值对,一对一对往里存。且要保证键的唯一性。
1、常用的方法:
(1)添加:put(K key, V value) ;   putAll(Map
(2)删除:clear() ;remove(Object key)//返回对应的值
(3)判断:containsValue(Object value) ;containsKey(Object key) ;isEmpty()     返回的是boolean值。
(4)获取:get(Object key) ; size();   values()
(5)取出:entrySet() ;   keySet()
2、Map子类对象的特点
Map:|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
           |--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
           |--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
3、Map集合的两种取出方式
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
(1)keySet:将map中所有的键存入到Set集合。因为set具备迭代器。所以可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。

import java.util.*;
class MapDemo2
{
public static void main(String[] args)
{
Map map = new HashMap();
map.put("02","zhangsan2");
map.put("03","zhangsan3");
map.put("01","zhangsan1");
map.put("04","zhangsan4"); //将Map集合中的映射关系取出。存入到Set集合中。
Set<map.entry> entrySet = map.entrySet();
Iterator<map.entry> it = entrySet.iterator();
while(it.hasNext()) {
Map.Entry me = it.next();
String key = me.getKey();
String value = me.getValue();
System.out.println(key+":"+value);


(2)Set<Map.Entry<k,v><map.entry> entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry,


Set<map.entry> entrySet = map.entrySet();
Iterator<map.entry> it = entrySet.iterator();
while(it.hasNext()) {
Map.Entry me = it.next();
String key = me.getKey();
String value = me.getValue();
System.out.println(key+":"+value);
}
/* //先获取map集合的所有键的Set集合,keySet();
SetkeySet = map.keySet(); //有了Set集合。就可以获取其迭代器。
Iteratorit = keySet.iterator();
while(it.hasNext()) {
String key = it.next(); //有了键可以通过map集合的get方法获取其对应的值。
String value  = map.get(key);
System.out.println("key:"+key+",value:"+value);
}
*/
}
}

 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net 

 


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值