自定义泛型集合

package C12_21;public class abstractList {public static void main(String[] args) {stu<String> stus = new stu<String>();stus.setS("hello");System.out.println(stus.getS());// 灵活, 可以传入任意数据类型。 将运行错误转变为编译错误。stus.show("hhh");}}// 从泛型集合, 可以 学到自定义集合类。
class stu<S, V> {private S s;private V v;public void setS(S s) {this.s = s;}public S getS() {return s;}public void setV(v v) {this.v = v;}public V getV(V v) {return v;}// 自定义泛型方法// 语法:自定义泛型方法 修饰符 + <类型> + 返回值 + 方法名(参数) { 方法体 } public <T> T show(T t) {System.out.println(t);return t;}// 静态泛型方法 类型J和 S,不能一样public static <J> void setObj(J j) {System.out.println(j);}// 下面两个方法是易错的。public static<S> void setObj(S s) { // 无法解析str或str不是字段// System.out.println(s.str);// 正确System.out.println(s); }// 错误, 不能对非静态类型S进行静态引用/*public static void setObj<S s> {System.out.println(s);}*/
}

Result

hello
hhh

自定义泛型接口, Comparable

// 泛型接口A,可以支持多种类型让子类实现。
interface A<O> {}class B implements A<String> {public void show(String str) {System.out.println(str);}
}

Demo

  • Comparable 比较接口就是泛型接口应用的一个经典例子。
  • 先看看基本数据类型的compareTo方法
     // compareTo 方法的原理System.out.println("a".compareTo("b")); // -1System.out.println("b".compareTo("a")); // 1System.out.println("a".compareTo("a")); // 0System.out.println("a".compareTo("c")); // -2/*** 用正数 表示 左边大于右边, 负数反之* 0 表示两对象相等* 所以,有了用自定义的对象比较,按照年龄,或者名字排序了*/
class Student implements Comparable<Student> {private String name;private int age;public Student() {}public Student(String name, int age) {super();this.name = name;this.age = age;}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 String toString() {return "Student [name=" + name + ", age=" + age + "]";}// 按照年龄比较优先,年龄相等,再姓名public int compareTo(Student stu) {int a = this.age - stu.age;return a == 0 ? this.name.compareTo(stu.name) : a;}}

测试

     Student[] stus = new Student[3];stus[0] = new Student("abc", 12);stus[1] = new Student("jb", 18);stus[2] = new Student("abcc", 2);for (Student stu : stus) {System.out.print(stu + "\t");  }// Comparable 接口, 用arrays的sort排序。Arrays.sort(stus);System.out.println("\n" + "排序后");for (Student stu : stus) {System.out.print(stu + "\t");}

结果如下

Student [name=abc, age=12] Student [name=jb, age=18] Student [name=abcc, age=2]
排序后
Student [name=abcc, age=2]    Student [name=abc, age=12]    Student [name=jb, age=18]

自定义泛型集合,接口相关推荐

  1. C#中的集合、哈希表、泛型集合、字典

    集合ArrayList 集合:集合可以看做是数组,可以将其看成"长度可变,具有很多方法的数组".使用ArrayList,首先需要导入命名空间using.system.collect ...

  2. Collections.sort()泛型集合排序的使用,和自定义类实现Comparable<T>接口重写compareTo(T o)方法完成Collections.sort()排序,以及自定义排序规则

    Collections算法类         1.Collections类是Java提供的一个集合操作工具类. 2.Collections类定义了一系列用于操作集合的静态方法,用于实现对集合元素的排序 ...

  3. Java泛型(1)--集合使用泛型Generic、自定义泛型、泛型在继承上的体现、通配符的使用

    文章目录 泛型的概念 集合中使用泛型 自定义泛型结构 泛型在继承上的体现 通配符的使用 泛型的概念 集合容器类在设计阶段/声明阶段不能确定这个容器实际存的是什么类型的对象,所以在JDK1.5之前只能把 ...

  4. java(四)【常用API,自定义泛型、collection接口】

    day04[常用API.正则表达式,泛型.Collection集合API] 主要内容 Date类 Java是面向对象的思想,会用一个类来代表一个事物. Date代表了系统当前此刻日期对象!年月日时分秒 ...

  5. List泛型集合总结(一)

    为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合: a.使用ArrayList 直接将对象放入ArrayList,操作直观,但由于集合中的项是Object类型,因此每次使用都必须 ...

  6. 泛型学习笔记:泛型使用的注意点、泛型在继承方面的体现、自定义泛型结构、泛型应用举例、通配符

    泛型学习笔记 集合是为了解决数组某些存储限制的特点出现的,但是数组有一个优点就是存放的数据的类型是确定的,但是集合容器在声明阶段存入的对象是什么类型是不确定的,所以在JDK1.5之前只能把元素的类型设 ...

  7. 黑马毕向东Java课程笔记(day14-1——14-11):集合类(集合框架)——集合类分类与特点+List集合接口及其子类

    1.集合类特点   为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式.   数组和集合类同是容器,有何不同 ...

  8. 6w字泛型集合知识梳理总结

    泛型&集合 即使再小的帆也能远航~ 一.目录 泛型 集合框架 list接口 Set接口 List和Set总结 Map接口 Collections集合工具类 Iterator接口 Queue接口 ...

  9. Java泛型-泛型作用+泛型在各种数据结构中的使用+自定义泛型

    文章目录 1. 概念 2. 为什么要使用泛型(Generic) 2.1 在ArrayList中使用泛型 2.2 在HashMap中使用泛型 3. 自定义泛型结构 3.1 泛型类与泛型接口 3.2 泛型 ...

最新文章

  1. 玩转python轻松过二级 百度网盘,玩转Python轻松过二级
  2. linux查询关键词上下行_【已解决】Linux下通过关键字模糊查找搜索文件
  3. jQuery获取自身HTML
  4. python01_python简介
  5. 编译OpenJDK12:test_json.cpp error C2143 语法错误
  6. petalinux笔记
  7. 会议一体机_多媒体会议系统方案
  8. 凯思面试经历转置一个string
  9. 【MAX7800实现KWS20 demo演示】
  10. Android之登录注册——简易版
  11. Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索——目录
  12. SPP、ASPP与PPM
  13. Node.js的HTTP
  14. 【第2篇】GooLeNet
  15. dhrystone测试结果_Dhrystone Benchmark
  16. 基于live555中的liveMedia库的client开发流程
  17. 环境变量的配置及作用
  18. 网康出钱 请您换最新款上网行为管理
  19. 中国历代王朝帝王惊人之最
  20. docker安装nextcloud出现“ 内部服务器错误”

热门文章

  1. 前端学习(1043):回车把数据存储到本地存储里面
  2. 前端学习(1032):jquery插件-瀑布流
  3. spring mvc学习(37):JavaEE-JSP基础-EL表达式和JSTL标签库(Taglibs)
  4. java学习(97):中断线程的另一种处理
  5. java学习(68):局部内部类
  6. linux ace platform_linux.gnu,Linux下配置和使用ACE笔记
  7. java响应很慢排插_服务响应时间慢:Java SecureRandom和/ dev / random - java
  8. unity text不能刷新_Unity使用ComputerShader实时压缩RT!
  9. java 事件分发线程_深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) [转载]...
  10. .Net Core 3.0依赖注入替换 Autofac