泛型

1、在定义一个类的方法时,因为不确定返回值类型,所以用一个符号代替,这个符号就是泛型

eg:ArrayList list = new ArrayList();

2、泛型的好处:

1、提高了数据的安全性,将运行时的问题提前暴露在编译阶段

2、避免了强转的麻烦

3、泛型类的定义 包含了泛型的类就是泛型类

格式:class 类名{

}

说明:

1.类名后面跟着的泛型类型,是泛型的声明,一旦泛型声明出,就相当于这个类型成了已知类型,这个类型可以在

整个类中使用。

2.泛型的声明需要一个合法的标识符即可。常用的大写字母:T W Q K V E

3.泛型的确定:将来在使用这个类创建对象的时候

4、练习 模拟栈和队列

importjava.util.LinkedList;public classDemo03 {public static voidmain(String[] args) {

MyStack ms = new MyStack();

ms.push("abc");

ms.push("aaaa");

ms.push("bbb");while(!ms.isEmpty()) {

System.out.println(ms.pop());

}

}

}class MyStack{private LinkedList ll = new LinkedList();//添加元素

public voidpush(T t) {

ll.addFirst(t);

}//删除元素

publicT pop() {//return ll.removeLast();

returnll.removeFirst();

}//判断为空

public booleanisEmpty() {returnll.isEmpty();

}

}

模拟栈

5、泛型方法的定义

1、在方法声明中,带着泛型声明的方法,就是泛型方法

2、格式:修饰符返回值类型 方法名(参数列表){}

3、说明:

1.在方法上声明的类型,可以在整个方法中当做已知类型来使用。

2.如果非静态的方法没有任何泛型的声明,那么可以使用类中定义的泛型。

3.如果静态方法上没有任何的泛型的声明,那就不能使用类中定义的泛型。

6、泛型接口的定义与使用

1、带着泛型定义的接口

2、定义格式:interface 接口名称{}

3、说明:

1.在接口声明上,定义好的泛型,作用范围整个接口。

2.泛型接口被其它类实现的时候,有两种实现方式:

1)声明的类不再是一个泛型类,而是一个确定了泛型的类。

2)声明的类还是一个泛型类,可以在创建对象的时候确定类型。

7、通配符

? extends E: E的类型以及子类类型

? super E:E的类型及其父类

Animal

|--Dog

|--YelloDog

method(? extends Animal)

method(? super Dog)

Set

1、Set是Collection的子接口

2、特点:无序、没有索引、不能重复

3、是接口,所以是抽象的,所以实现的子类,HashSet、TreeSet

4、HashSet特点:使用哈希表的存储方式存储元素,相同的元素无法存进集合,集合本身没有顺序,存储和取出的顺序不一致

5、Set集合的遍历:

第一种,转成数组,toArray(),不带泛型的数组,得到的是Object类型的数组

第二种,转成数组,toArray(T[] arr) 带泛型的数组,得到T类型的数组

当自己定义的数组大小小于集合时,会自动创建一个新的数组,将新数组返回

当自定义的数组大小大于等于集合时,不会自动创建,剩余位置用null填充,返回数组

第三种,使用迭代器 iterator()

第四种,增强for循环

格式:for (元素的数据类型 元素名称:要遍历的集合) {

使用元素名称代表当前访问的元素

}

本质:底层还是迭代器,在使用增强for循环时使用集合的功能会触发并发修改异常

使用增强for循环时无法修改元素

6、

/** 随机生成10个20-40之间的随机数,存储在合适的集合中,并且进行遍历。

要求:随机数不能重复。*/

importjava.util.HashSet;importjava.util.Random;importjava.util.Set;public classDemo01 {public static voidmain(String[] args) {

Set s = new HashSet<>();

Random r= newRandom();

Integer a ;while(s.size()<10) {

a= r.nextInt(21)+20;

s.add(a);

}for(Integer i:s) {

System.out.println(i);

}

}

}

HashSet练习

/** 键盘录入一个字符串,输出其中的字符,相同的字符只输出一次*/

importjava.util.HashSet;importjava.util.Scanner;importjava.util.Set;public classDemo04 {public static voidmain(String[] args) {

Scanner sc= newScanner(System.in);

Set s = new HashSet<>();

String s1=sc.nextLine();for(int i=0;i

s.add(s1.charAt(i));

}for(Character c:s) {

System.out.print(c);

}

sc.close();

}

}

HashSet练习二

7、HashSet如何使元素唯一

先比较元素的HashCode(),如果相同则再比较元素的equals()方法,如果还相同则认为一致,不添加此元素

想要修改可以在元素的类中重写这两个方法

importjava.util.HashSet;public classDemo06 {public static voidmain(String[] args) {/** 姓名和年龄全部一致为相同元素

**/HashSet hs = new HashSet();

hs.add(new Person("jack",20));

hs.add(new Person("rose",30));

hs.add(new Person("wangwu",40));

hs.add(new Person("jack",20));

hs.add(new Person("zhaoli",21));

System.out.println(hs);

}

}classPerson {

String name;intage;public Person(String name, intage) {super();this.name =name;this.age =age;

}

@OverridepublicString toString() {return name+"..."+age;

}

@Overridepublic inthashCode() {return name.hashCode()+age;

}

@Overridepublic booleanequals(Object obj) {

Person p=(Person)obj;return name.equals(p.name)&&age==p.age;

}

}

HashSet元素重写唯一性

8、LinkedHashSet 是HashSet的子类,在元素存储的时候记录了元素的前后地址

特点:元素的存储取出顺序一致

9、TreeSet 元素的顺序按照字典顺序排列的集合,保证元素唯一性有两种

一种是让元素本身具有比较性  在元素类中继承Comparable接口,重写comparaTo方法

第二种是让集合具有比较性 比较器,继承Comparator接口,重写compara方法

/** 对下列四位同学的成绩做降序排序,如果成绩一样,

* 那在成绩排序的基础上按照年龄由小到大排序。*/

public classHomework4 {public static voidmain(String[] args) {

TreeSet s = new TreeSet<>();

s.add(new Student("qq",20,80));

s.add(new Student("ww",22,60));

s.add(new Student("ee",22,70));

s.add(new Student("rr",21,60));

s.add(new Student("qq",20,40));

System.out.println(s);

}

}class Student implements Comparable{privateString name;private intage;private floatscore;publicStudent() {}public Student(String name, int age, floatscore) {super();this.name =name;this.age =age;this.score =score;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}public floatgetScore() {returnscore;

}public void setScore(floatscore) {this.score =score;

}

@Overridepublic intcompareTo(Student o) {if(score==o.score) {if(age==o.age) {return 0;

}else if(age

}else{return 1;

}

}else if(score

}else{return -1;

}

}

@OverridepublicString toString() {return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";

}

}

TreeSet 保证元素唯一

importjava.util.Comparator;importjava.util.Set;importjava.util.TreeSet;public classHomework7 {public static voidmain(String[] args) {//TODO Auto-generated method stub

Set set = new TreeSet<>(new Comparator() {

@Overridepublic intcompare(Student o1, Student o2) {//TODO Auto-generated method stub

return o1.scoreAll-o2.scoreAll>=0?-1:1;

}

});

set.add(new Student("qq",30,89,56));

set.add(new Student("ww",57,90,78));

set.add(new Student("ee",35,99,56));

set.add(new Student("rr",78,77,57));for(Student s:set) {

System.out.println(s);

}

}

}classStudent{

String name;intscore1;intscore2;intscore3;intscoreAll;public voidsetScoreAll() {

scoreAll= score1+score2+score3;

}public Student(String name, int score1, int score2, intscore3) {super();this.name =name;this.score1 =score1;this.score2 =score2;this.score3 =score3;

setScoreAll();

}

@OverridepublicString toString() {return name + ", 语文" + score1 + ", 数学:" + score2 + ", 英语:" +score3+ ", 总分:" +scoreAll;

}

}

TreeSet比较器

java set泛型_Java 集合二 泛型、Set相关相关推荐

  1. java多态和泛型_Java面向对象(二) 接口、多态和泛型

    一.接口 二.多态 多态是同一个行为具有多个不同表现形式或形态的能力. 2.1 类型转换 转换方式 隐式 向上转型 对于基本数据类型,存储容量低的可自动向存储容量高的类型转换 对于引用变量,子类可被转 ...

  2. java基本数据类型泛型_Java中的泛型

    泛型规范在JDK1.5版本中被添加,使用泛型机制编写的代码比起随意使用Object变量然后再进行强制类型转换的代码具有更高的安全性和可读性,同时也更为简洁.泛型对于集合类尤其有用,例如 ArrayLi ...

  3. .net java 泛型_Java高级特性泛型看这一篇就够了

    作者:qwer1030274531 出自:ITPUB博客 1.为什么我们需要泛型? 通过两段代码就可以知道为什么需要泛型 /*** * 没有泛型的时候实现加法 */public class NonGe ...

  4. java 反射与泛型_Java基础系列 - 泛型和反射机制

    package com.test5; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Java泛型和反射机 ...

  5. java中什么泛型_java中的泛型(一)

    在java中我们定义接口其实定义的是这个类的功能,在很多时候我们并不关心这个类的类型而是这个类的能力.泛型的出现让我们的代码和代码所能操作的类型不在绑定在一起,不仅可以复用代码降低耦合还可以提高代码的 ...

  6. 【什么是泛型?集合使用泛型有什么优点?】

    什么是泛型? JDK 1.5开始引入泛型,泛型可以为集合指定元素类型,添加不符合的元素类型则会编译报错. Java中泛型中的T ,R ,K ,V ,E 是什么? public <R> 0b ...

  7. java hasset 顺序_java集合排序问题

    List: 元素是有序的,元素可以重复,因为该集合体系有索引(脚标) 常用的子类对象: 1----ArrayList 底层的数据结构是使用的数组结构特点:查询速度快,但是增删比较慢 2----Link ...

  8. java 泛型和集合_Java集合和泛型

    集合 常用的集合有ArrayList,TreeSet,HashMap,HashSet. ArrayList 最常用的集合,每次插入都在后面追加元素. TreeSet 以有序状态保持并可防止重复.当你需 ...

  9. 【Java SE】记录一次Java实验(多态,集合,泛型)

    Java第三次实验: 正文开始@Assassin 目录: Java第三次实验: 1. 实验目的: 2. 实验内容: 2.1 处理扑克牌: Poker.java: PokerComparator.jav ...

最新文章

  1. java postdelayed_你真的懂Handler.postDelayed()的原理吗?
  2. php中将数据加入到文件中
  3. html 转word c#,c#操作word类,进行html和word文档的互相转换
  4. 智慧新泰时空大数据与云平台_智慧警务大数据云平台开发情报研判系统解决方案...
  5. LeaFlet学习之聚合效果
  6. 【API进阶之路】API带来的微创新,打动投资人鼓励我创业
  7. (96)FPGA面试题-Verilog设计半加器
  8. Android ActionBar的Overlay模式如何不遮盖顶部内容的问题
  9. BERT中进行NER为什么没有使用CRF,我们使用DL进行序列标注问题的时候CRF是必备么?...
  10. 华为 5680 OLT native vlan配置方式
  11. c语言源码转流程图,C语言算法第5章源代码以及流程图.doc
  12. 算法笔记:使用A*算法解决八数码问题
  13. 2019华为软件精英挑战赛总结篇
  14. 如何修复cdn服务器异常,cdn服务器连接异常怎么解决
  15. 用计算机时的注意事项,计算机使用注意事项
  16. 巴西龟饲养日志----半年捉鱼经验总结
  17. 关于MIDI键盘的服务对接
  18. OAuth2学习(二)——OAuth2实战
  19. Merriam-Webster's Vocabulary Builder 学习笔记 Unit 21
  20. 用python的statamodels模块拟合VAR模型

热门文章

  1. react实现页面多个模块的切换
  2. libmysqld_dev linux,解决mysql安装mysqld doesn\'t exist or is not-鸟哥のlinux-ChinaUnix博客
  3. 北京计算机一级2020,2020北京市一级计算机基础及MS Office应用考试在线自测试题库(不限设备,登陆即可做题)...
  4. mysql 加载数据校验_mysql 导入数据后的校验程序
  5. Guns 企业版多数据源配置集成dynamic-datasource
  6. Warning: Missing charsets in String to FontSet conversion
  7. flowable 数据库表结构 梳理
  8. 工作流实战_02_flowable 流程模板导入
  9. Vue3 --- vue-router4 编程导航
  10. 虚拟机安装centos