Java基础_集合泛型

泛型

1.泛型概述
我们在集合中存储数据的时候,存储了String和Integer俩种类型的数据。而在遍历的时候,我们把它当做是String类型处理,做了转化,所以
会报错。但是呢?它在编译期间却没有告诉我们。所以我们觉得这一个设计的不好。所以集合也模仿着数组中在定义之前指明数据的类型,在
创建对象的时候明确元素的数据类型。这样就不会存在问题了。这一种技术被称为泛型。

2.泛型
是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊类型。参数化类型,把类型当作参数传递.

3.泛型定义数据格式
<数据类型>
注意:这里面的数据类型只能够是引用类型。

4.泛型的好处
(1).把运行时期的问题提前到了编译期间
(2).避免了强制类型转换
(3).优化了程序设计,解决了异常提示

5.泛型使用举例:
public class Test {
public static void main(String[] args) {
List<String> lt=new ArrayList<String>();
lt.add("hello");
lt.add("world");
lt.add("java");
for(int i=0;i<lt.size();i++){
System.out.println(lt.get(i));
}

}
}
//输出结果
hello
world
java

6.泛型类的使用
(1).概述:
把泛型定义在类上。
public class ObjectTool<T>()//这里面的T表示的就是变了的类型,T-->type

(2).代码实现
学生类:
public class Student implements Cloneable{
//学生名字
private String name;
//年龄
private int age;

//无参
public Student(){

}

//带参构造
public Student(int age, String name) {
super();
this.age=age;
this.name=name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}
//测试类
public class Test {
public static void main(String[] args) {
List<Student> lt=new ArrayList<Student>();
Student st=new Student(10,"张三");
Student st1=new Student(11,"李四");
Student st2=new Student(12,"王五");
lt.add(st);
lt.add(st1);
lt.add(st2);
for(int i=0;i<lt.size();i++){
System.out.println(lt.get(i).getAge()+"----"+lt.get(i).getName());
}
}
}
//输出结果:
10----张三
11----李四
12----王五

7.泛型接口
(1).所谓的泛型接口就是把泛型定义在接口上。

(2).代码实现
//定义接口
public interface Testfx<T> {
public abstract void show(T t);
}
//定义接口实现类
public class TestfxImpliment<T> implements Testfx<T> {
@Override
public void show(T t) {
// TODO Auto-generated method stub
System.out.println(t);
}
}
//测试类
public class Test {
public static void main(String[] args) {
Testfx<String> tf=new TestfxImpliment<String>();
tf.show("hello");

Testfx<Integer> tf1=new TestfxImpliment<Integer>();
tf1.show(100);
}
}

8.泛型的高级使用(通配符)
(1).通配符使用
?:任意类型,如果没有明确,那么就是Object以及任意的java类了。
?:extends E:向下限定,E以及其子类
?:super E:向上限定,E以及其父类

(2).代码实现
//动物类
public class Animal {
}
//狗类
public class Dog extends Animal{
}
//猫类
public class Cat extends Animal{
}
//测试类
public class Test {
public static void main(String[] args) {
//如果没有明确需要的是什么类型
Collection<Object> c1=new ArrayList<Object>();
Collection<?> c2=new ArrayList<Object>();
Collection<?> c3=new ArrayList<Animal>();
Collection<?> c4=new ArrayList<Dog>();
Collection<?> c5=new ArrayList<Cat>();
//? extends E:向下限定,E以及其子类
Collection<? extends Animal> c6=new ArrayList<Animal>();
Collection<? extends Animal> c7=new ArrayList<Dog>();
Collection<? extends Animal> c8=new ArrayList<Cat>();
//? super E:向上限定 ,E以及父类
Collection<? super Animal> c9=new ArrayList<Animal>();
Collection<? super Animal> c10=new ArrayList<Object>();
}
}

原文地址:https://www.cnblogs.com/nwxayyf/p/9535916.html

时间: 2024-10-10 02:36:46

Java基础_集合泛型的相关文章

JAVA基础_自定义泛型

泛型的来源 在Java中,泛型借鉴了C++的模版函数,从而引入了泛型. C++泛型 int add(int x,int y){ return x + y; } float add(float x.float y){ return x + y; } double add(double x,double y){ return x + y; } // 泛型函数对上面的整数,浮点数的抽象和实现 template<class T> T add(T x,T y){ return x + y; } 自定义泛

Java基础_集合概述以及Colletion集合

集合 1.集合的概述 (1).集合的来由 我们学习的是面向对象的语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们必须把这个对象进行 存储,而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的只是里面,有哪一些是容器类 型的呢? 数组和StrngBuffer.但是呢?StringBuffer的结果是一个字符串,不一定满足我们的要求,所以我们只能够选择数组,也就是对象数组. 而对象数组又并不能够适应变化的需求,因为数组的长度是固

java基础_集合

集合1.List:继承Collection接口,实现类有ArrayList LinkedList Vector ;有序,值可重复,可以存储空值: ①List遍历方法: 1 public static void main(String[] args) { 2 List<String> list = new ArrayList<String>(); 3 //插入数据 4 list.add(null);list.add("a");list.add("b&qu

Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就是对数据结构的封装 数组与集合的比较 数组:长度固定,可以存储基本数据类型,也能存储对象 集合:长度可变,只能存储对象类型(由于有包装类的存在,集合可以存储任何类型) 集合的体系结构 集合也叫容器,用于存储对象 我们根据不同的需求和不同的数据结构来对集合做了不同的抽象 Collection接口-公共

java基础之集合Set

1.集合 当向集合Set中增加对象时,首先集合计算要增加对象的hashcode,根据该值得到一个位置用来存放当前的对象,当在该位置没有一个对象存在的时候,集合set认为该对象在集合中不存在,直接增加进去.如果在该位置有一个对象存在,接着将准备增加到集合中的的对象与该位置上的对象进行equals比较,若返回false,在进行一次散列,将该对象放到散列后计算出的新地址.若返回true,不会再将该对象增加到集合中 2.当重写equals方法时,必须要重写hashcode方法 如果一个类的两个对象,使用

java基础之集合List-ArrayList、LinkedList、Vector的区别

PS:本篇博客主要参考jdk的底层源码,而非自己动手写代码. 请问ArrayList.LinkedList.Vector的区别 ①ArrayList底层实际上是采用数组实现的(并且该数组的类型的Object类型的) ②如果jdk6,采用Array.copyOf()方法来生成一个新的数组,如果是jdk5,采用的是System.arraycopy()方法(当添加的数据量大于数组的长度时候) ③List list = newArrayList()时,底层会生成一个长度为10的数组来存放对象 ④Arra

黑马程序员——java基础 ArrayList集合基本方法演示

java基础 ArrayList集合基本方法演示 import java.util.ArrayList; import java.util.Iterator; public class ArrayListDemos { public static void main(String[] args) { // 创建一个新的容器 ArrayList al = new ArrayList(); al.add("abc1"); al.add("abc2"); al.add(&

Java基础笔记:泛型

内容:Java中的泛型 优秀文章:新浪博客-海洋星球:http://blog.sina.com.cn/s/blog_44c1e6da0100cus3.html书籍:细说Java.疯狂Java讲义 说明:泛型是于Java SE1.5添加的新特性:泛型的本质是参数化类型,简单来说就是将泛型看作一个或多个参数,使用这个参数的代码片段可以由任何具体类类型的参数来替换:泛型的参数类型只能是类类型,不能是简单类型(简单类型是指不能再简化的编程语言内置数据类型,java中有实数-float-double.整数

I学霸官方免费教程三十:Java基础教程之泛型

泛型 先给大家举个例子:如现在有一家工厂,可以生产手机,也可以生产电脑.以后还可能生产其他产品.如果给某个工厂加上了泛型,就规定了这个工厂只能生产手机或电脑,不能再生产其他产品了. 实例: package generic; /**  * 产品枚举Product  * @author 学霸联盟 - 赵灿  */ public enum Product { 手机,电脑 } package generic; /**  * 手机类Phone  * @author 学霸联盟 - 赵灿  */ public