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

泛型

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

eg:ArrayList list = new ArrayList();

2、泛型的好处:

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

2、避免了强转的麻烦

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

格式:class 类名{

}

说明:

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

整个类中使用。

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

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

4、练习 模拟栈和队列

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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、

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/** 随机生成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练习

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

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()方法,如果还相同则认为一致,不添加此元素

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

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

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 保证元素唯一

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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比较器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java gson_Java 中 Gson的使用

JSON 是一种文本形式的数据交换格式&#xff0c;它比XML更轻量、比二进制容易阅读和编写&#xff0c;调式也更加方便;解析和生成的方式很多&#xff0c;Java中最常用的类库有&#xff1a;JSON-Java、Gson、Jackson、FastJson等一、Gson的基本用法Gson提供了fromJson() 和toJson…

java web 集成dom4j_[JavaWeb基础] 031.dom4j写入xml的方法

上一篇我们讲述了dom4j读取xml的4种方法&#xff0c;甚是精彩&#xff0c;那么怎么样写入xml呢&#xff1f;我们直接看下源码实现。public static void main(String[] args) throws Exception {// 创建文档Document document DocumentHelper.createDocument();// 设置编码docu…

java servlet 调试日志 logger sae_java servlet 调试日志 lo

java servlet 调试日志 lo[2021-02-10 08:32:08] 简介:php去除nbsp的方法&#xff1a;首先创建一个PHP代码示例文件&#xff1b;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#x…

求java简单计算器源代码_java简单计算器源代码

简单计算器代码package calcultorthree;import java.awt.BorderLayout;//导入边界布局管理器类import java.awt.GridLayout;//导入网格布局管理器类import java.awt.TextField;//导入文本区域类import java.awt.event.ActionEvent;//导入事件类import java.awt.event.ActionLis…

java遍历斐波纳契数列_详解循环、迭代、递归、分治(Leet Code 509 斐波那契数列),实际运用...

Multiple solutions of Fibonacci (Python or Java)本章是用英文写的&#xff0c;作为或想成为一名优秀的攻城狮&#xff0c;习惯阅读英文文档将使你受益良多。例如更好的查看最新版的官方文档、与国外友人交流、等等 其实英文的生词也并不多,其中90&#xff05;的英文都在代码…

java 二分查找 排序_java 冒泡排序 二分查找

下面这个程序是先定义一个整型数组&#xff0c;然后将其中的元素反序赋值&#xff0c;再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数&#xff0c;返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值&#xff0c;-2表示这个数比这个数组的最小…

php里h和h的区别吗,编码h264h和h264b有什么区别

区别如下&#xff1a;1、版本H.265是新的编码协议&#xff0c;也即是H.264的升级版。H.265标准保留H.264原来的某些技术&#xff0c;同时对一些相关的技术加以改进。新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系&#xff0c;达到最优化设置。2、储…

php 抽象类 静态方法吗,php中的抽象类和静态方法是什么

php中的抽象类是指&#xff1a;在class前加了abstract关键字且存在抽象方法的类&#xff0c;它不能被直接实例化&#xff1b;静态方法是指&#xff1a;被static关键字修饰的方法&#xff0c;静态方法用于操作静态属性。抽象类抽象类是指在 class 前加了 abstract 关键字且存在抽…

centos 怎样下载php,centos下怎样安装软件

centos下安装软件的方法是&#xff1a;centos安装软件的命令1、rpm包的安装1.安装一个包# rpm -ivh2.升级一个包# rpm -Uvh3.移走一个包# rpm -e4.安装参数--force 即使覆盖属于其它包的文件也强迫安装--nodeps 如果该RPM包的安装依赖其它包&#xff0c;即使其它包没装&#xf…

php post 微信沙箱,微信支付平台错误:获取沙箱密钥失败,确保交易密钥是

按官方提示进行获取沙箱密钥的时候&#xff0c;久试不爽&#xff0c;总是提示错误 &#xff1a;“获取沙箱密钥失败&#xff0c;确保交易密钥是否正确”。这个纯粹是微信平台挖的坑呀&#xff0c;文档没有详细的进行一些讲解&#xff0c;也没有提示需要key&#xff0c;下面来说…

linux显示磁盘使用情况命令,Linux中监控磁盘分区和使用情况的几个工具

导读在文章中将讨论Linux中可用于监视磁盘使用情况的命令行实用程序&#xff0c;提供有关总大小容量、已用总量、文件系统信息和分区信息等。让我们看看这些工具如何帮助检索这些信息df命令df是一个Linux命令行实用程序&#xff0c;用于监视Linux磁盘使用情况。df命令显示文件系…

linux网络是文件吗,linux网络配置文件是什么意思

离开了么放得下我么回来了么还会爱我么新兵答主07-22TA获得超过2383个赞网卡的配置&#xff1a;1.网卡配置文件对于网卡信息的配置通常包括&#xff1a;配置IP地址、子网掩码和网关。网卡信息保存在网卡配置文件中。网卡配置文件位于/etc/sysconfig/network-scripts目录下。一块…

cd linux给u盘安装程序,使用U盘安装CDlinux

3、先把u盘插在电脑上与电脑连接&#xff0c;格式化成“FAT”文件系统&#xff0c;更改卷标为“CDLINUX”&#xff0c;之后再打开UltraISO工具进行写入&#xff1a;a、这里把你下载好的CDlinux文件打开。b、点击“写入硬盘映像”c、这里直接默认就好&#xff0c;点击“写入”4、…

zenmap扫描出来linux,如何在Linux上使用NMAP安全扫描器

Nmap是一个免费的开源网络发现和安全审计实用程序&#xff0c;在Linux用户社区中被广泛使用&#xff0c;因为它使用起来非常强大。 Nmap通过在特定目标(通过IP)发送数据包&#xff0c;并通过解释传入的数据包来确定哪些帖子被打开/关闭&#xff0c;扫描系统上运行什么服务&…

c语言小明今年16岁,C语言1.爷爷对小明说:我现在的年龄是你的7倍,过几年是你的6倍,再过若干年就分别是你的5倍,4倍,3倍,2倍.你知道爷爷和小明现在的年龄吗?...

满意答案ta_meng2013.06.15采纳率&#xff1a;49% 等级&#xff1a;12已帮助&#xff1a;5126人#include void main(){int i,j,k;int t60,t50,t40,t30,t20; //用于标记是否达到过这些要求&#xff0c;C语言貌似没有bool类型吧for (i21;i<200;i7) //爷爷的年龄为i{ji/7;…

Android usb 权限广播,android10.0 USB弹窗权限流程解析

USB请求权限流程1. 新建activity&#xff0c;获取UsbManager usbManager (UsbManager) getSystemService(Context.USB_SERVICE)2. 获取所以的USB设备HashMap map usbManager.getDeviceList()3. 过滤别的USB设备&#xff0c;拿到自己USB的USBDevice类&#xff0c;然后请求USB权…

android 仿网易标题栏,仿网易新闻可滑动标题栏TabLayout(文字或图标)

近期有需要&#xff0c;要做一个类似于网易新闻首页中的可滑动标题栏 TabLayout&#xff0c;根据大神写的 FlycoTabLayout 改造了一下&#xff0c;可以加载网络图片&#xff0c;主要实现内容如下&#xff1a;1. 可配置标题选中效果(下划线/上三角/圆角矩形或椭圆)&#xff1b;2…

android 多态如何组件化,Android组件化之子模块之间通信方案

1 背景Android开发中你的模块(Module)一般只有一个app主模块&#xff0c;随着功能不断扩展你会发现一个模块的缺点就是各种业务高度耦合&#xff0c;你就想测试登录模块&#xff0c;那么你可能会把支付模块也编译进去了&#xff0c;代价就是编译耗时&#xff0c;降低效率。大牛…

unity android sd卡路径,一、文件与路径——2、unity路径特点写法和文件读写全攻略...

1、Unity中各路径和目录的对应关系image.png其中&#xff0c;安卓中的路径是有两种分支的image.png在打包面板中&#xff0c;有个Write Access当我们选择Internal Only就是表示沙盒路径&#xff0c;/data/data/com.xxx.xxx/对应的Android方法为 getFilesDir()当我们选择SDCard时…

html 图片行内剧中,HTML入门(转义字符、行内样式和块级元素、定位、锚点、跑马灯标签、图片标签、表格标签的讲解)...

一、转义字符由特殊字符包裹的文本 会当做标签去解析对应不换行空格对应全角空格 em是字体排印学的计量单位&#xff0c;相当于当前指定的点数。其占据的宽度正好是1个中文宽度&#xff0c;而且基本上不受字体影响。<对应<>对应>二、行内元素和块级元素1.块级标签默…