javaweb学习总结六(泛型)

一:泛型的概念

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

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:自定义泛型类

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

时间: 2024-10-14 18:33:28

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

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

转载:http://www.cnblogs.com/xdp-gacl/p/3763559.html 只为成功找方法,不为失败找借口! javaweb学习总结(六)——Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 例如: 1 <servlet> 2 <servlet-name>ServletC

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

在学习继承的时候, 我们已经知道可以将一个子类的对象赋值给其父类的对象, 也就是父类引用指向子类对象, 如: 1 Object obj = new Integer(10); 这其实就是面向对象编程中的is-a关系. 既然上面的代码正确, 那么在泛型中, 也可以使用如下代码: 1 public class Box<T> { 2 private T obj; 3 4 public Box() {} 5 6 public T getObj() { 7 return obj; 8 } 9 10 pub

JavaWeb学习笔记六 JSP

JSP技术 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分.网页开发者们通过结合HTML代码以及嵌入JSP操作和命令来编写JSP. JSP通过网页表单获取用户输入数据.访问数据库及其他数据源,然后动态地创建网页. JSP标签有多种功能,比如访问数据库.记录用户选择信息.访问JavaBeans组件等,还可

javaweb学习之Servlet开发(二)

javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 例如: 1 <servlet> 2 <servlet-name>ServletConfigDemo1</servlet-name> 3 <servlet-class>gacl.servlet

Javaweb学习笔记6—EL表达式与JSTL及自定义标签

 前几天博客被黑了,导致博客登陆不上,把前几天应该发的东西的东西重新发一遍 今天来讲javaweb的第六阶段学习. EL表达式与JSTL及自定义标签是对上篇文章介绍的JSP的扩展,不能说是很重要的东西,但是也要了解. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 另外:如果图看不清的话请右击---在新窗口中打开会清楚很多. 一.EL表达式 1,EL简介 Expression Lan

JavaWeb学习(三)----JSP内置对象详解

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4065790.html 联系方式:[email protected] [系列]JSP学习系列文章:(持续更新) JavaWeb学习(一)----JSP简介及入门(含Tomcat的使用) JavaWeb学习(二)----JSP脚本元素.指令元素.动作元素 JavaWeb学习(三)----JSP内置对象

javaweb学习总结——使用Cookie进行会话管理(转载)

javaweb学习总结--使用Cookie进行会话管理(转载) 一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾经来过,这称之为有状态会话. 二.会话过程中要解决的一些问题? 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据. 三.保存会话数据的两种技术 3.1.Cookie Cooki

JavaWeb学习篇之----Servlet过滤器Filter和监听器

JavaWeb学习篇之----Servlet过滤器Filter和监听器 首先来看一下Servlet的过滤器内容: 一.Servlet过滤器的概念: *************************************************************************************** Servlet过滤器是在Java Servlet规范2.3中定义的,它能够对Servlet容器的请求和响应对象进行检查和修改. Servlet过滤器本身并不产生请求和响应对象,

javaWeb学习总结(8)- jsp指令(3)

一.JSP指令简介 一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: page指令 Include指令 taglib指令 JSP指令的基本语法格式:<%@ 指令 属性名="值" %> 例如: 1 <%@ page contentType="text/html;charset=gb2312"%> 如果