集合框架(泛型概述和基本使用)

package cn.itcast_01;

import java.util.ArrayList;

import java.util.Iterator;

/*

* ArrayList存储字符串并遍历

*

* 我们按照正常的写法来写这个程序, 结果确出错了。

* 为什么呢?

* 因为我们开始存储的时候,存储了String和Integer两种类型的数据。

* 而在遍历的时候,我们把它们都当作String类型处理的,做了转换,所以就报错

*了。

* 但是呢,它在编译期间却没有告诉我们。//其实在Myeclipse中已经告诉你了,黄色警告线就告诉你了,这里隐含着类型安全问题,为什么有警告线,就是为了告诉你这里容易出问题

* 所以,我就觉得这个设计的不好。

* 回想一下,我们的数组

* String[] strArray = new String[3];

* strArray[0] = "hello";

* strArray[1] = "world";

* strArray[2] = 10;

* 集合也模仿着数组的这种做法,在创建对象的时候明确元素的数据类型。这样就不会在有问题了。

* 而这种技术被称为:泛型。

*

* 泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。参数化类型,把类型当作参数一样的传递。(也就是说一开始不明确,到创建对象或者调用方法的时候才明确)

* 比如 一开始我不明确什么类型,但是一造对象ArrayList<String> array = new ArrayList<String>();就要明确,为什么呢?因为集合说了集合可以放任何任意类型,而我知道我的集合放字符串,我就告诉你我放字符串

* 我知道我放学生,我就告诉你ArrayList我放学生   还有就是 只要在API看到这种 Iterator<E>就要明确类型

* 格式:

* <数据类型>

* 此处的数据类型只能是引用类型。

* 好处:

* A:把运行时期的问题提前到了编译期间

* B:避免了强制类型转换

* C:优化了程序设计,解决了黄色警告线

*/

public class GenericDemo {

public static void main(String[] args) {

// 创建

ArrayList<String> array = new ArrayList<String>();

// 添加元素

array.add("hello");

array.add("world");

array.add("java");

// array.add(new Integer(100)); Integer是一个引用类型,而add()方法里面接收的是object类型,引用类型是object类型的一种

//array.add(10); // JDK5以后的自动装箱,把这个通过反编译工具,反编译之后,为add.(Integer.valueof(10))

// 等价于:array.add(Integer.valueOf(10));

// 遍历

Iterator<String> it = array.iterator();

while (it.hasNext()) {

// ClassCastException

// String s = (String) it.next();//这里要把Integer类型转化为字符类型,所以要报错,前三个可以,最后一个要报错

String s = it.next();

System.out.println(s);

}

// 看下面这个代码

// String[] strArray = new String[3];

// strArray[0] = "hello";

// strArray[1] = "world";

// strArray[2] = 10;这里要报错

}

}

时间: 2024-11-03 21:07:46

集合框架(泛型概述和基本使用)的相关文章

java集合框架--泛型

1.泛型概述 泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候进行.也被称为参数化类型,可以把类型当做参数一样传递过来,在传递过来之前并不明确,但是在使用的时候就明确了. 泛型是JDK5以后出现的新特性. 2.泛型出现的原因1 package com; import java.util.ArrayList; import java.util.Iterator; public class GenericDemo { public static void main(

java习题-集合框架-泛型

集合框架 一 去除List集合中的重复元素. 思路: 1,先创建一个临时容器.用于存储唯一性的元素.2,遍历原容器,将遍历到的元素到临时容器中去判断,是否存在.3,如果存在,不存储到临时容器,如果不存在,存储到临时容器中.4,遍历结束后,临时容器中存储的就是唯一性的元素.5,如果需要将这些唯一性的元素保留到原容器中,只要将原容器清空,将临时容器中的元素添加到原容器中即可.代码实现 package cn.itcast.api.b.list.subclass; import java.util.Ar

一、集合框架体系概述

1.为什么出现集合类?• 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式.2.数组和集合类同是容器,有何不同?• 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象 3.集合类的特点 • 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型 的对象. 4.集合容器因为内部的数据结构不同,有多种具体容器.不断的向上抽取,就形成了集合框架. =============

Java基础知识强化之集合框架笔记30:集合之泛型概述和基本使用

1. 泛型的引入: (1)首先我们看看下面这一段代码,如下: 1 package cn.itcast_01; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 6 7 public class GenericDemo { 8 public static void main(String[] args) { 9 // 创建 10 ArrayList<String> array = new ArrayList<Str

java集合框架---泛型总结

/* 泛型:指定集合类型,在运行而不是编译时时就发现问题,消除安全隐患.避免强转. */ package pack; import java.util.ArrayList; import java.util.Iterator; /*public class Main { public static void sys(Object obj) { System.out.println(obj); } public static void main(String[] args) { TreeSet<S

JAVA-初步认识-常用对象API(集合框架-泛型-泛型类)

一. 泛型我们了解完基本原理之后,除了在集合中用来传递参数类型外,还有其它的应用.它还能为我们提供很多设计上的便捷. 介绍一下以前和现在的定义方法,有什么不一样. 这里面为了方便于应用,搞了一个工具类,和主要的程序分开发. 对工具类的描述,现在要操作person,要用工具类对person对象进行操作,可以完成person对象的设置和获取. 这个工具类只能操作person,不能操作其它对象.如果想要其它对象,还要书写Tool1,Tool2......这样很麻烦,怎么办?(对传输进来的person对

JAVA-初步认识-常用对象API(集合框架-泛型-泛型限定-上限的体现)

一. 现在要说应用,查看一下API中的注释, 这里有一个方法addAll里面有extedns E,我们看一下这个方法什么时候用.下面这三个集合,有存储person,student,还有worker的. 再接下来演示一下这个高级应用,如果我们要去想定义一下集合的话,(描述一下集合) 这个类里面加入的元素不确定的情况下,写的是个E,明确什么类型,add方法中添加的也是什么类型.一次添加一个元素比较慢,addAll方法可以添加一堆元素, 一般情况下,就是这么写.(addAll又将mycollectio

集合框架-泛型

泛型: 1.JDK1.5版本出现的新特性,安全机制. 2.泛型将运行时期的问题转移到了编译时期. 3.避免了强制转换的麻烦. 4.泛型技术是用于编译时期的技术. 泛型的体现: <>  这就是用于定义类型参数的符号. 泛型可以简单的理解为,接收具体的元素类型. 泛型-擦除: 对源码进行编译时,通过泛型进行类型的检查. 如果类型没有问题,则将源码编译成class文件. 注意,class文件中是不带有泛型信息的.这种情况称之为泛型擦除. 虚拟机会根据输入数据的类型进行类型的转换

JAVA-初步认识-常用对象API(集合框架-泛型-泛型方法)

一. 刚才说了一下泛型类,现在准备说另外一个,在工具类的基础上演示一下(基于上一节的泛型工具类). 本来如果是显示和打印String类的方法,参数中直接表明String类型即可,但是如果想显示和打印Intrger类型的参数,那么就需要将参数改为object. 基于泛型工具类,书写可以是下面这样的.工具类里面指定什么类型,方法就跟着操作什么类型. 这样书写是否行得通,来演示一下, 传递String类型时没有问题,但是工具类中的泛型是传递什么类型都可以,那么改成Integer试一下,集成工具显示了错