java泛型和map_泛型与map

泛型:主要为了解决程序中装箱和拆箱的问题:

装箱: 值类型-->引用类型  Object obj=1;

拆箱: 引用类型--->值类型  int number=(int)obj;

.自定义泛型接口、泛型类和泛型方法

从上面的内容中,大家已经明白了泛型的具体运作过程。也知道了接口、类和方法也都可以使用泛型去定义,以及相应的使用。是的,在具体使用时,可以分为泛型接口、泛型类和泛型方法。

自定义泛型接口、泛型类和泛型方法与上述Java源码中的List、ArrayList类似。如下,我们看一个最简单的泛型类和方法定义:

public classGenericTest {public static voidmain(String[] args) {

Box name = new Box("corn");

System.out.println("name:" +name.getData());

}

}class Box{privateT data;publicBox() {

}publicBox(T data) {this.data =data;

}publicT getData() {returndata;

}

}

在泛型接口、泛型类和泛型方法的定义过程中,我们常见的如T、E、K、V等形式的参数常用于表示泛型形参,由于接收来自外部使用时候传入的类型实参。那么对于不同传入的类型实参,生成的相应对象实例的类型是不是一样的呢?

public classGenericTest {public static voidmain(String[] args) {

Box name = new Box("corn");

Box age = new Box(712);

System.out.println("name class:" + name.getClass()); //com.qqyumidi.Box

System.out.println("age class:" + age.getClass()); //com.qqyumidi.Box

System.out.println(name.getClass() == age.getClass()); //true

}

}

由此,我们发现,在使用泛型类时,虽然传入了不同的泛型实参,但并没有真正意义上生成不同的类型,传入不同泛型实参的泛型类在内存上只有一个,即还是原来的最基本的类型(本实例中为Box),当然,在逻辑上我们可以理解成多个不同的泛型类型。

究其原因,在于Java中的泛型这一概念提出的目的,导致其只是作用于代码编译阶段,在编译过程中,对于正确检验泛型结果后,会将泛型的相关信息擦出,也就是说,成功编译过后的class文件中是不包含任何泛型信息的。泛型信息不会进入到运行时阶段。

对此总结成一句话:泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型。

如果集合设置为了泛型:只能存储泛型变量及其子类。

map

Map:key-value 的键值对,key 不允许重复,value 可以

1、严格来说 Map 并不是一个集合,而是两个集合之间 的映射关系。

2、这两个集合没每一条数据通过映射关系,我们可以看成是一条数据。即 Entry(key,value)。Map 可以看成是由多个 Entry 组成。

3、因为 Map 集合即没有实现于 Collection 接口,也没有实现 Iterable 接口,所以不能对 Map 集合进行 for-each 遍历

最常用的实用类是HashMap

map接口常用方法:

c00bd3335a1dfd5516100cca7a9823de.png

1 public classMapText {2 public static voidmain(String[] args) {3 Map map = new HashMap();4 map.put("1", "张飞");5 map.put("2", "说书人");6 map.put("3", "全聚德");7 map.put("4","斗鱼");8 map.put("5", "一醉千里");9 System.out.println("key值为:1的用户"+map.get("1"));//通过key获取值10 //通过key删除键值对

11 map.remove("1");12 //maps中的键值对个数

13 System.out.println(map.size());14 System.out.println(map.containsKey("1"));15 //判断该Key在集合中是否存在16 //containsValue:判断值是否存在17

18 //1:仅遍历key

19 Set keySet =map.keySet();20 for(String object : keySet) {21 System.out.println("集合中的key:"+object);22 }23

24 //2:仅遍历value

25 Collection values =map.values();26 for(String item:values){27 System.out.println("集合中的value:"+item);28 }29

30 //3:key和value同时遍历 Entry:

31 Set> entrySet =map.entrySet();32 for (Entryentry : entrySet) {33 System.out.println("key:"+entry.getKey() +",Value:"+entry.getValue());34

35 }36 }37 }

Map接口

Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value;

Map中的键值对以Entry类型的对象实例形式存在;

建(key值)不可重复,value值可以重复,一个value值可以和很多key值形成对应关系,每个建最多只能映射到一个值。

Map支持泛型,形式如:Map

Map中使用put(K key,V value)方法添加

HashMap类

HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现

HashMap中的Entry对象是无序排列的

Key值和value值都可以为null,但是一个HashMap只能有一个key值为null的映射(key值不可重复)

Map的遍历方法

1、迭代器Iteraor

2、增强型for循环

3、通过键——值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值