一:泛型的概念

泛型用来现在集合中的存储类型,防止取出时强制转换发生错误。

1:没有使用泛型时,如下:

  1. @Test
  2. public void test1() {
  3. List list = new ArrayList();
  4. list.add("aaa");
  5. Integer i = (Integer) list.get(0); // 编译时并不会报错
  6. System.out.println(i);
  7. }

而是运行时错误

2:使用泛型后,如下:

二:使用泛型进行存取

可以使用传统的迭代器的keyset或者entryset方式,或者使用增强for循环

  1. @Test
  2. public void test3() {
  3. Map<Integer, String> map = new HashMap<Integer, String>();
  4. map.put(1, "aaa");
  5. map.put(2, "bbb");
  6. map.put(3, "ccc");
  7.  
  8. // 传统keyset
  9. System.out.println("传统keyset方式......");
  10. Set<Integer> set = map.keySet();
  11. Iterator<Integer> it = set.iterator();
  12. while (it.hasNext()) {
  13. Integer key = it.next();
  14. String value = map.get(key);
  15. System.out.println(key + "=" + value);
  16. }
  17. // keyset 增强for
  18. System.out.println("keyset...增强for");
  19. for (Integer key : map.keySet()) {
  20. String value = map.get(key);
  21. System.out.println(key + "=" + value);
  22. }
  23. // 传统entryset
  24. System.out.println("传统entryset方式");
  25. Set<Map.Entry<Integer, String>> entry = map.entrySet();
  26. Iterator<Entry<Integer, String>> item = entry.iterator();
  27. while (item.hasNext()) {
  28. Entry<Integer, String> en = item.next();
  29. Integer key = en.getKey();
  30. String value = en.getValue();
  31. System.out.println(key + "=" + value);
  32. }
  33. // entryset 增强for
  34. System.out.println("entryset...增强for");
  35. for (Map.Entry<Integer, String> entr : map.entrySet()) {
  36. Integer key = entr.getKey();
  37. String value = entr.getValue();
  38. System.out.println(key + "=" + value);
  39. }
  40. }

这里要注意,hashmap存储是安装hashcode进行排序的,如果想按照存入时的

顺序取出,推荐使用LinkedHashMap类,因为它的数据结构是链表。

三:泛型使用注意事项

1:使用泛型时,定义变量和创建对象(左右两边)泛型参数类型要一致

ArrayList<Object> list = new ArrayList<String>();

ArrayList<String> list = new ArrayList<Object>();

以上两种方式都是错误的!

a:  ArrayList  list = new ArrayList<String>();

b:  ArrayList<String> list = new ArrayList();

以上两种方式都是正确的!

a方式是为了兼容jdk1.5之前的程序,如果在jdk1.5之后写程序,会使用到泛型,想要调用

jdk1.5之前的程序,必须兼容此种情况。

b方式是为了兼容不同编程习惯的程序员之间可以互相调用。

2:擦除

在编译期时,使用泛型可以避免类型转换的错误,但是为了使泛型不影响程序运行效率,在生成

class文件时,泛型信息会被忽略掉。

四:自定义泛型

1:自定义泛型方法

如下在方法上声明泛型:

如果有返回值,可以避免类型的强制转换:

可以声明多个泛型:

  1. public <T, K, V> void defineGeneric(T t, K k, V v) {
  2. System.out.println(t + ":" + k + ":" + v);
  3. }

练习题:使用泛型,颠倒数组内的元素

  1. @Test
  2. public void test5() {
  3. Integer[] arr = { 1, 2, 3, 4, 5, 6 };
  4. System.out.println(Arrays.toString(arr));
  5. reverse(arr);
  6. System.out.println(Arrays.toString(arr));
  7.  
  8. }
  9.  
  10. // 使用泛型,颠倒数组中所有的元素
  11. public <T> void reverse(T[] t) {
  12. for (int i = 0, j = t.length - 1; i < t.length / 2; i++, j--) {
  13. exChange(t, i, j);
  14. }
  15. }
  16.  
  17. // 使用泛型,交互数组中两个元素
  18. public <T> void exChange(T[] t, int a, int b) {
  19. T temp = t[a];
  20. t[a] = t[b];
  21. t[b] = temp;
  22. }

2:自定义泛型类

如果在类里有很多方法使用泛型,可以将泛型定义在类上。

javaweb学习总结六(泛型)的更多相关文章

  1. javaweb学习总结(六)——Servlet开发(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  2. javaweb学习总结(六)——Servlet开发(二)(转)

    转载自 http://www.cnblogs.com/xdp-gacl/p/3763559.html 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文 ...

  3. Java泛型学习笔记 - (六)泛型的继承

    在学习继承的时候, 我们已经知道可以将一个子类的对象赋值给其父类的对象, 也就是父类引用指向子类对象, 如: Object obj = new Integer(10); 这其实就是面向对象编程中的is ...

  4. JavaWeb学习笔记六 JSP

    JSP技术 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. JSP是一种Java s ...

  5. JavaWeb学习 (十六)————JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  6. javaweb学习总结(六)——Servlet开发(三) 常见问题疑问

    [1]response.getWriter().write()与out.print()的区别http://blog.csdn.net/javaloveiphone/article/details/81 ...

  7. javaweb学习之Servlet开发(二)

    javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...

  8. JavaWeb学习笔记总结 目录篇

    JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...

  9. JavaWeb学习总结(转载)

    JavaWeb学习总结(五十三)--Web应用中使用JavaMail发送邮件      JavaWeb学习总结(五十二)--使用JavaMail创建邮件和发送邮件     JavaWeb学习总结(五十 ...

随机推荐

  1. 【现代程序设计】【期末作业】【homework-09】

    作业要求说明: http://www.cnblogs.com/xinz/p/3441537.html 我在做一个什么样的应用: 展示如何逐步求解一个加权矩阵的 最大子矩阵 任意联通图形 下面是软件的截 ...

  2. JavaFx版本植物大战僵尸

    http://www.cnblogs.com/lslvxy/archive/2013/04/17/3026711.html —————————————————————————————————————— ...

  3. 您需要来自administrators的权限才能对此文件进行更改

    今天我重装了系统,以前D盘里的一个文件夹想删除,可以一直没法删除,原先它提示"您需要来自 S-1-5-21-602162358-1284227242-682003330-500 的权限才能对 ...

  4. java多线程中的volatile和synchronized

    package com.chzhao; public class Volatiletest extends Thread { private static int count = 0; public ...

  5. mysql一些写常用命令

    参见pcttcnc2007博客腾飞 1.mysql的status信息命令: mysql> show global status; 2.可以列出mysql服务器运行各种状态值,另外,查询mysql ...

  6. 虚拟攻防系统 HoneyPot

    转载原地址 http://www.2cto.com/Article/200410/9.html Honeypot 是一个故意设计为有缺陷的系统,通常是用来对入侵者的行为进行警报或者 诱骗.传统的 Ho ...

  7. SQLserver锁和事务隔离级别的比较与使用(转)

    SQLserver锁和事务隔离级别的比较与使用(转) http://www.cnblogs.com/chenlulouis/archive/2010/12/06/1898014.html http:/ ...

  8. 《解剖PetShop》系列转载

      1 <解剖PetShop>系列之六 PetShop之表示层设计    http://ityup.com/showtopic-8.html 2 <解剖PetShop>系列之五 ...

  9. Flex “跑马灯”效果(自定义“跑马灯”控件)

    自定义类(BroadCastMarquee.as): package marquee { import flash.events.MouseEvent; import flash.events.Tim ...

  10. Unix-Linux编程实践 学习点滴

    1.结构体最后定义一个char p[0]有什么作用 2. 3. 4. 1.结构体最后定义一个char p[0] 有什么作用 这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势: ...