泛型

什么是泛型?为什么使用泛型?

不问归期 提交于 2019-12-03 10:25:16
今天看了几篇文章深有体会,可以说把以前工作中一些情况串起来了 泛型:就是一种不确定的数据类型。 // 比如:ArrayList<E> E就是泛型。 这种不确定的数据类型需要在使用这个类的时候才能够确定出来。 // 泛型可以省略,如果省略,默认泛型是Object类型。 // 泛型的好处: // 1. 省略了强转的代码。 // 2. 可以把运行时的问题提前到编译时期。 为什么要使用泛型? 为了了解这个问题,我们先看下面的代码,代码省略了一些内容,但功能是实现一个栈,这个栈只能处理int数据类型: public class Stack { private int[] m_item; public int pop(){...} public void Push(int item){...} public Stack(int i) { this.m_item = new int[i]; } } 上面的代码运行得很好,但是,当我们需要一个栈来保存String类型时,该怎么办呢?很多人就想到把上面的代码复制一份,把int改成String不就行了。当然,这样做本身是没有任何问题的,但一个优秀的程序员是不会这样做的,因为他想到若以后再需要long、Node类型的栈该怎么做呢?还要再复制吗?优秀的程序员会想到用一个通用的数据类型Object来实现这个栈: public class Stack {

20182327 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结

て烟熏妆下的殇ゞ 提交于 2019-12-03 10:07:34
20182327 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结 教材学习内容总结 1、算法、栈、队列 2、算法优略可由增长函数判定。 3、分为时间和空间,时间只看最大位。 4、后缀表达式:有数字和符号计算。遇到数字将其放入栈顶。遇到符号就将栈顶- 5、两个数用符号操作。栈顶为被操作数。 6、栈的类型不定可以用泛型,即不确定类型,到实例化时再确定类型。 7、栈是可以通过集合实现的,top在初始化是为0,之后会变成栈顶的+1. 8、ADT接口,可以通过接口来实现栈。 9、栈有异常:1.入栈容量不够 2.出栈时栈空 3.扫描完栈中值多于1 10、pop,peek,push等方法编写类 11、队列与栈核心思想类似,是先进先出 12、 查找算法的总结 - 线性查找,通过依次遍历所要查找元素的集合,比较是否存在所需查找的元素,直到找到该元素或返回false表明集合不存在该元素。实现较为简单,==但当集合元素数量巨大时,效率极慢==。 - - 二分法查找,通过每次将集合分为两部分,比较所需查找的元素位于中间元素的左半区还是右半区,依次进行二分,直至找到元素,或返回false。效率较高,例如,一个含义一百万元素的集合,只需20次左右即可完成查找。==但二分法的实现需要基于一个有序数组,否则无法实现。== 13、排序算法的总结 - 顺序排序——选择排序法

20182310 第七周学习总结

三世轮回 提交于 2019-12-03 09:36:40
20182310 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结 教材学习内容总结 1.链表实现栈 data存放数据点 next下一节点 存储地址 数据域 单链表:只含一个指针域的链表 a-》 双向链表:《-a-》 地址不一定连续 要用链表实现栈,就要操作链表的两端。所以除了一个指向链表首元素的引用(称为head)之外,还需要跟踪另一个指向链表末元素的引用(称为tail),还需要一个整型变量count来跟踪队列中的元素数目。 2.尾插法 Student temp = Head; while(temp.next!=null){ temp=temp.next} temp.next=node; return head; 用一个临时指针(不能影响头指针,头指针移动则垃圾回收)等于头指针temp=temp。next 若为null,找到了链表结尾,则指向新插入的对象 3.头插法:新对象指向首个元素,head指针赋给新对象,则新链表完成 node.next=Head; Head =node; return Head; 删除:1.temp.next=temp.next.next 2.两个指针,p.next=q.next 循环链表 双向链表 栈与链表 top即为head 4.渐进复杂度(时间/空间复杂度) 又称为算法的阶,符号计为O(),它和增长函数有关 5.简单选择排序算法

创建泛型数组

久未见 提交于 2019-12-03 09:22:02
public class Array<E> {   private E[] data;   public Array(int size){     data = (E[])new Object[size]; //也许是jdk的历史遗留问题,java不允许创建泛型数组   } } 来源: https://www.cnblogs.com/jinsheng1027/p/11785270.html

从头认识java-13.6 类型擦除(type erasure)(1)-概念

易管家 提交于 2019-12-03 08:48:53
这一章节我们讨论一下类型擦除。 1.什么是类型擦除? 在java里面泛型其实是伪泛型,因为他都只是在编译器里面实现的,在jvm里面是没有泛型的概念。 我们看下面的代码: package com.ray.ch11; import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayList<Integer> list1 = new ArrayList<Integer>(); ArrayList<String> list2 = new ArrayList<String>(); System.out.println(list1.getClass() == list2.getClass()); } } 输出: true 为什么两个list对应的Class对象是一致的呢?因为在jvm层面,他只看到List,没有里面的类型。 也就是,泛型里面的类型信息被擦掉了,这就是所谓的类型擦除。 2.扩展 我们使用另一个例子来扩展开来。 package com.ray.ch11; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet;

Java之路---Day16(泛型)

∥☆過路亽.° 提交于 2019-12-03 08:25:00
2019-11-02-23:25:26 目录   1. 泛型的概念:   2. 泛型的定义和使用:     2.1 定义和使用含有泛型的类:     2.2 定义和使用含有泛型的方法:     2.3 定义和使用含有泛型的接口: 泛型的概念:   泛型是一种未知的数据类型,当我门不知道使用什么数据类型的时候,可以使用泛型,泛型也可以看成是一个变量,用来接受数据类型   E e:Element 元素   T t:Type 类型 泛型的定义和使用:   我们在集合中会大量使用到泛型,用来灵活地将数据类型应用到不同的类、方法、接口当中,将数据类型作为参数进行传递    定义和使用含有泛型的类:     修饰符 class 类名<代表泛型的变量>{ } 1 package demosummary.generic; 2 3 public class GenericClass<E> { 4 private E name; 5 6 public GenericClass() { 7 } 8 9 public GenericClass(E name) { 10 this.name = name; 11 } 12 13 public E getName() { 14 return name; 15 } 16 17 public void setName(E name) { 18 this.name

第七周学习总结

半世苍凉 提交于 2019-12-03 06:42:41
学号 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结 教材学习内容总结 十二章在讲编程中的时间复杂度的概念,时间复杂度越低,程序运行效率越高。时间复杂度的计算可通过寻找运行次数最多的程序,计算他的运行次数,取n的最高次方的极数,即为程序的时间复杂度。 栈可以理解为一类数据的集合,栈中的元素可以写入,也可以读出。元素存在先后次序。先入栈的先被读出。栈可用数组,链表两种形式实现。应注意使用数组的实现链表时要注意数组大小,在push过程中可添加扩大数组大小的程序。这样的栈通过数组下表定义顺序。 栈实现的链表通过setnext来实现链接 泛型:通过泛型来定义类 class Box<T> 。可使栈使用更加灵活。栈中所存放的元素可通过使用时定义来实现。T即为战中存放数据的类型。如定义一个int型的栈 Box<Integer> num1 = new Box(); ,即栈中存放int型的变量。若要对栈中的元素进行操作需要定义int型变量,或者需要定义方法返回值为int时,都可使用T来代替。而声明该类的对对象时,应 Box<T> num1 来定义。 教材学习中的问题和解决过程 问题1:对泛型的理解不够深入。实例化时难以定义对象。 问题1解决方案:起初被 class Box<T> 迷惑,不会使用。经百度及课本查询,得知该类名与其他类名无异,只是可以使程序更加灵活。 问题2

JAVA泛型

我只是一个虾纸丫 提交于 2019-12-03 04:42:06
JAVA中的基本类型,以及泛型的介绍、使用。 一、数据类型 数据类型 :数据与操作是构成程序的两个要素,数据也是程序处理的对象。数据类型是对程序所处理的数据的抽象,数据类型决定了数据的含义、表示方式、存储格式和运算。 JAVA基本数据类型 :不存在引用的概念,基本数据类型都是直接存储在内存中的内存栈上,数据本身的值就是存储在栈空间里面,因此使用时需赋具体值,且可用==判断是否相等。JAVA里面的八种基本数据类型都是这种存储模型。 JAVA八种基本数据类型:    byte :JAVA中最小的数据类型,在内存中占8位,即1个字节。取值范围是-128 ~ 127,默认值0。    short :短整型,在内存中占16位,即2个字节。取值范围-32768~32717,默认值0。    int :整型,用于存储整数。在内存中占32位,即4个字节。取值范围-2147483648~2147483647,默认值0。    long :长整型,在内存中占64位,即8个字节。取值范围-2 63 ~2 63 -1,默认值0L。    float :浮点型,在内存中占32位,即4个字节。用于存储带小数点的数字(与double的区别是float小数点后精度为7位),默认值为0。    double :双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0。    char :字符型

20182334 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结

坚强是说给别人听的谎言 提交于 2019-12-03 02:43:12
20182334 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结 教材学习内容总结 本周学习了栈的数组表达和链表表达和队列的数组表达和链表表达,无论是数组还是链表,都离不开一个接口,叫做ADT: public interface StackATD<T> { public void push(T element); public T pop(); public T peek(); public boolean isEmpty(); public int size(); public String toString(); } public interface List<T> { public void add( T element); public T delete(); public T first(); public boolean isEmpty(); public int size(); public String toString(); } 这两段代码起到中枢作用,承接栈的所有方法,也联系着测试代码。 同样在队列中也是如此,需要同样的接口。 栈相当于做电梯,先进的人后出,后进的人先出;队列就相当于我们一般的排队,先排的人先走,后排的人后走。 还学习了时间复杂度, 在我理解看来 ,时间复杂度就是观察代码中有几层循环,有几层循环就有几个n,最后得到结果。

java泛型详解(转载文章)

ε祈祈猫儿з 提交于 2019-12-03 02:29:02
原文链接: https://blog.csdn.net/s10461/article/details/53941091 1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。 泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。 2. 一个栗子 一个被举了无数次的例子: List arrayList = new ArrayList(); arrayList.add("aaaa"); arrayList.add(100); for(int i = 0; i< arrayList.size();i++){ String item = (String)arrayList.get(i); Log.d("泛型测试","item = " + item); }