Java学习笔记29(集合框架三:泛型)
泛型的概念:
简单地讲,就是同一个方法(类),可以接受不同的数据类型并运行得到相对应的结果,不会出现安全问题
上一篇有一段这样的代码:
没有定义集合类型、迭代器类型
package demo; import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class CollectionDemo {
public static void main(String[] args) {
//集合可以存储任意类型的对象
//集合中,不指定存储的数据类型,也可以存储
Collection c1 = new ArrayList();
c1.add("abc");
c1.add("def");
Iterator it1 = c1.iterator();
while(it1.hasNext()){
//it.next获取Object类型,强制转换
String s1 = (String)it1.next();
System.out.println(s1.length());
}
}
}
这里会有隐患:如果add(1);,自动装箱成Integer类型,无法转换成String,发生类型的转换异常
java中提出了泛型的概念,来解决这个问题:
package demo; import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class GenericDemo {
public static void main(String[] args) {
function();
} public static void function(){
Collection<String> c1 = new ArrayList<String>();
c1.add("abc");
c1.add("def");
Iterator<String> it1 = c1.iterator();
while(it1.hasNext()){
String s1 = it1.next();
System.out.println(s1);
}
}
}
这时候如果add(1);,在编译的时候会无法通过,解决了安全问题
其实这里的泛型,是伪泛型,这里只是一个编译的手段,如果不是String类型,编译无法通过,否则编译成功
而编译后的class文件里面不存在泛型,但是由于编译过程中处理了类型问题,所以最后运行也是安全的
泛型的方法(了解即可,没有实际应用价值):
package demo; import java.util.ArrayList; public class GenericDemo {
public static void main(String[] args) {
ArrayList<Integer> array = new ArrayList<Integer>();
// ArrayList集合内有方法toArray泛型方法
array.add(123);
array.add(456); Integer[] i = new Integer[(array.size())];
Integer[] j = array.toArray(i);
for (Integer k : j) {
System.out.println(k);
}
}
}
同样存在泛型的接口,泛型类等,目的都是为了解决安全问题并且方便使用者,并且带来了增强for循环
泛型的通配符?:
package demo; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator; public class GenericDemo {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<String>();
array.add("abc");
array.add("def"); HashSet<Integer> set = new HashSet<Integer>();
set.add(123);
set.add(456); iterator(array);
iterator(set);
}
//要求定义一个方法,可以同时迭代两个集合
public static void iterator(Collection<?> c){
Iterator<?> it1 = c.iterator();
while(it1.hasNext()){
System.out.println(it1.next());
}
}
}
Java学习笔记29(集合框架三:泛型)的更多相关文章
- 【Java学习笔记】<集合框架>TreeSet,Comparable,Comparator
public class Person implements Comparable{ private String name; private int age; public Person(){ su ...
- 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素
import java.util.ArrayList; import java.util.Iterator; import cn.itcast.p1.bean.Person; public class ...
- 【Java学习笔记】<集合框架>对字符串进行长度排序
package 测试; import java.util.Comparator; public class ComparatorByLength implements Comparator { //定 ...
- Java学习笔记之---集合
Java学习笔记之---集合 (一)集合框架的体系结构 (二)List(列表) (1)特性 1.List中的元素是有序并且可以重复的,成为序列 2.List可以精确的控制每个元素的插入位置,并且可以删 ...
- Java学习笔记之集合
集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组而数组的长度固定 ...
- 【原】Java学习笔记026 - 集合
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:从三国演义中 ...
- JavaSE 学习笔记之集合框架(十八)
集合框架:,用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区 ...
- java学习笔记之集合家族2
集合体系 一.数据结构 List集合储存数据结构 <1>堆栈结构 特点:先进后出 <2>队列结构 特点:先进先出 <3>数组结构 特点:查询快,增删慢 <4& ...
- Java基础学习笔记十七 集合框架(三)之Map
Map接口 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存 ...
随机推荐
- (转)2018CRM系统最新排行榜
https://www.jianshu.com/p/718cc29de91f 2018CRM系统最新排行榜 深谷幽兰呼 关注 2018.09.04 10:22 字数 1524 阅读 3182评论 0喜 ...
- Java学习08 (第一遍) - SpringMVC
写一下午的好多居然丢失...自动保存也只是保存丢失后的 那就不多写了,简单写: Spring:(自己画的) 官网的: 写一个Spring的例子: Eclipse http://repo.spring. ...
- [Ting's笔记Day5]在部署到Heroku之前,将Rails项目从SQLite设定为PostgreSQL
前情提要: Paas(平台及服务)公司Heroku是个可以把我们写好的App部署到网际网络的好地方.而本篇是我从自己的上一篇文章:将Ruby on Rails项目部署到Heroku遇到的问题,当时困扰 ...
- faster rcnn源码阅读笔记2
- 接入层高性能缓存技术nginx+redis利器OpenResty
一. OpenRestyOpenResty是一个基于 Nginx与 Lua的高性能 Web平台,其内部集成了大量精良的 Lua库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极 ...
- mui页面传值
以下代码全部在script标签内 一.通过mui.openWindow()打开新页面(若目标页面为已预加载成功的页面,则在openWindow方法中传递的extras参数无效): mui.openWi ...
- spring proxy-target-class
<tx:annotation-driven transaction-manager="transactionManager" ...
- c++ 面试题(海量数据篇)
1,在海量数据中找中位数: 题目如下: 只有2G内存的pc机,在一个存有10G个整数的文件,从中找到中位数,写一个算法. 解答:http://www.cnblogs.com/youxin/archiv ...
- 9.22 keep studying
项目要换用element组件了. element [http://element.eleme.io/1.4/#/zh-CN]是饿了么前端出品的一套基于Vue2.0的组件库,今天看了一下,确实简单好看. ...
- linux之重定向命令
1.shell重定向概念:shell重定向包含输出重定向和输入重定向 何为输入输出方向?何为标准输入输出方向? 标准输入方向:从键盘读取用户输入的数据,然后再把数据拿到程序(C语言程序.Shell 脚 ...