对象转型、迭代器Iterator、Set集合、装箱与拆箱、基本数据类型与字符串的转换、TreeSet集合与对象
包的声明与定义
需要注意的是,包的声明只能位于Java源文件的第一行。
在实际程序开发过程中,定义的类都是含有包名的; 如果没有显式地声明package语句,创建的类则处于默认包下; 在实际开发中,这种情况是不应该出现的(示例代码主要展现的是功能部分的代码,所以在大多数示例代码中没有为示例指定包名)。
如果有时候需要用到一个包中的许多类,则可以使用“import 包名.*; ”来导入该包下所有类。
对象转型
什么是对象转型
(1)数据类型转换
基本数据类型之间,在使用时可以进行类型转换。
其中:大à小的转换可能丢失数据
(2)对象转型
引用类型(对象)之间,使用时也可以进行转换,但前提是两个对象之间存在继承关系
其中:向下转型存在风险
向上转型(upcasting)
(1)语法
父类 父类对象=子类实例
(2)限制
只能用父类的成员,不能用子类的新成员(编译错)
向下转型(downcasting)
(1)语法
子类 子类对象=(子类)父类对象
(2)向下转型不安全
编译可以通过,运行时可能抛异常:java.lang.ClassCastException
(3)向下转型成功的条件
父类对象,其声明类型是父类,但实际类型是子类
子类实例向上转型得到的对象,再向下转型才能成功
instandof运算符
(1)语法
对象名 instanceof 类名
(2)运算规则
如果对象是类或其子类的实例,则返回true
迭代器Iterator<E>
java.util包中的一个接口Iterator<E>
作用
提供一组方法来遍历集合
Iterator<String> iter =list.iterator();
while(iter.hasNext())
{
String str=iter.next();
System.out.println(str);
}
主要方法
boolean hasNext():集合中是否还有下一个可访问的元素
E next():返回下一个可访问的元素。必须确保还有下一个可访问的元素,否则抛异常NoSuchElementException
void remove():删除上一次next()方法返回的元素。
迭代器遍历的基本逻辑
while(调用hasNext()){
调用next()读取元素
}
迭代器的好处
隐藏底层结构的复杂性,提供统一的遍历方法
迭代器的限制
只能遍历一次
用迭代器遍历时,集合是只读的
List的双向迭代
List的listIterator()方法,返回ListIterator接口,可以反向迭代
System.out.println("反向迭代");
while(iter.hasPrevious()) { System.out.println(iter.previous()+" "); }
怎样才能得到Iterator<E>接口的实例
Collection接口的iterator()方法
增强的for循环与迭代器(JDK1.5)
语法格式
for(集合中元素的类型 e:集合或数组){ 循环体 }
Set集合
List集合:元素可以重复,并且有序(存入的顺序)
Set集合:元素不能重复,而且无序
是Collection接口的子接口,只是对add()方法做了限制,并没有增加新的方法
HashSet如何排除相等的元素?
例:需要重写Object的两个方法:hashCode()和equals(),定位,判断
基本数据类型的变量不是对象
8种基本类型对应8个包装类 (1)java.lang包 (2)Byte、Integer、Short、Long、Float、Double 数字包装类,共同的父类java.lang.Number (3)Character、Boolean
包装类解决什么问题
把基本数据类型à对象
(可以像对象一样使用基本数据类型,即引用包装类的属性和方法)
如:(1)equals()方法
(2)compareTo()方法(实现了Compareable<T>接口)
装箱与拆箱
【说明】JDK1.5自动装箱、自动拆箱
装箱
(1)包装类的方法
构造方法
public Integer(int value)
public Integer(String s) throws NumberFormatException
静态方法:valueOf
public static Integer valueOf(int i)
public static Integer valueOf(String s)
throws NumberFormatException
(2)自动装箱
Integer 对象名=int数据;
拆箱
(1)拆箱后才能做为基本数据类型参与运算
(2)xxxValue()方法:xxx是基本数据类型
public int intValue()
public long longValue()
……
(3)自动拆箱
直接用:Integer可以直接用在任何使用int的地方
强制类型转换:(int)Integer对象
自动装箱与拆箱
(1)好处
使用int与Integer几乎等价,更加方便
(2)扩展:基本数据类型与Object之间的自动装箱与拆箱
装箱:Object 对象名=int数据
拆箱:int 变量名=(int)Object对象
基本数据类型与字符串的转换
String.valueOf()
基本数据类型String
(1)基本数据类型+""
(2)String.valueOf()
TreeSet集合与对象比较
一. 引例
TreeSet的特点:不重复,有序
TreeSet如何为对象排序
add( )方法抛异常
如果类没有实现java.lang.Comparable接口,TreeSet调用add()方法时将抛异常
二. 对象比较:Comparable接口
对象能否比大小?
有的对象可以按某种规则来比大小,从而实现排序
对象比大小不能用关系运算符
对象比大小必须要依赖某种规则,而不能直接使用比较运算符
即,通过调用某个方法(规则)来比较对象的大小
Comparable<T>接口的方法
只提供一个方法:int compareTo(T other)
返回0:两个对象相等
返回>0:当前对象大于other
返回<0:当前对象小于other
Comparable<T>接口的含义
(1)接口的用处:能使类具有比较的能力,即可比较的
(2)使用:如果类实现了该接口,那么对象之间就可以比较大小
三. 一组对象如何排序
例:对象数组的排序
可比较的对象才能排序
四. TreeSet中的对象应满足什么条件?
(1)实现Comparable接口
(2)comparaTo相等与equals()相等的逻辑必须一致
五. 对象能否按多种不同的规则排序
实现java.util.Comparator<T>接口,把接口作为参数传入相关的方法
比较器接口:Comparator<T>
(1)java.util.Comparator<T>
(2)接口的方法:int compare(T t1,T t2)
返回0:两个对象相等
返回>0:t1大于t2
返回<0:t1小于t2
如何使用该接口
(1)接口的用处:提供一个专门用于比较对象大小的类,即比较器
(2)使用:分两个步骤
步骤一:定义比较器
步骤二:需要时调用比较器来完成对象大小的比较
对象转型、迭代器Iterator、Set集合、装箱与拆箱、基本数据类型与字符串的转换、TreeSet集合与对象的更多相关文章
- C#面向对象14 List泛型集合/装箱和拆箱/字典集合(Dictionary)
1.List泛型集合 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- JAVA基础之——三大特征、接口和抽象类区别、重载和重写区别、==和equals区别、JAVA自动装箱和拆箱
1 java三大特征 1)封装:即class,把一类实体定义成类,该类有变量和方法. 2)继承:从已有的父类中派生出子类,子类实现父类的抽象方法. 3)多态:通过父类对象可以引用不同的子类,从而实现不 ...
- JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)
1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...
- c#基础语言编程-装箱和拆箱
引言 为什么有装箱和拆箱,两者起到什么作用?NET的所有类型都是由基类System.Object继承过来的,包括最常用的基础类型:int, byte, short,bool等等,就是说所有的事物都是对 ...
- java基础(七)-----深入剖析Java中的装箱和拆箱
本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型 ...
- 转 C# 装箱和拆箱[整理]
1. 装箱和拆箱是一个抽象的概念 2. 装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的 ...
- C# 装箱与拆箱
知识点 值类型. 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null. 值类型超出作用范围系统自动释放内存. 主要由两类组成:结构,枚举(enum),结构分为以下几类: ...
- C# 程序性能提升篇-1、装箱和拆箱,枚举的ToString浅析
前景提要: 编写程序时,也许你不经意间,就不知不觉的使程序代码,发生了装箱和拆箱,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候,减少装箱和拆 ...
- C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)
前言 之前对几个没什么理解,只是简单的用过可空类型,也是知道怎么用,至于为什么,还真不太清楚,通过整理本文章学到了很多知识,也许对于以后的各种代码优化都有好处. 本文的重点就是:值类型直接存储其值,引 ...
随机推荐
- MacOS X GateKeeper Bypass
MacOS X GateKeeper Bypass OVERVIEW On MacOS X version <= 10.14.5 (at time of writing) is it possi ...
- javascript_13-函数是一种数据类型
函数是一种数据类型 函数是一种数据类型 function var num =60; // 1 函数是一种数据类型 function var myFun = function(){ console.lo ...
- Flutter——Drawer、DrawerHeader、UserAccountsDrawerHeader组件(侧边栏组件)
在 Scaffold 组件里面传入 drawer 参数可以定义左侧边栏,传入 endDrawer 可以定义右侧边栏.侧边栏默认是隐藏的,我们可以通过手指滑动显示侧边栏,也可以通过点击按钮显示侧边栏. ...
- Linux系统Zip压缩和解压缩
Linux系统可以使用Zip来压缩占用空间较大的文件以便进行文件传输,传输完成后再进行解压缩来获取原文件.Linux安装Zip的命令为 apt-get install zip 安装完成后,使用 zip ...
- springboot Properties加载顺序源码分析
关于properties: 在spring框架中properties为Environment对象重要组成部分, springboot有如下几种种方式注入(优先级从高到低): 1.命令行 java -j ...
- python3 excel基本操作及格式设置
#encoding=utf-8 ''' excel基本操作整理 ''' #openpyxl 版本2.5.4 from openpyxl import * import datetime as dt f ...
- linux网络编程之socket编程(十一)
今天继续学习socket编程,这次主要是学习超时方法的封装,内容如下: ①.alarm[不常用,了解既可] 它的实现思路是这样的: 但是这种方案有一定的问题,因为闹钟可能会作为其它的用途,这时所设置的 ...
- 用来遍历map集合的方法
map集合是以键值对进行存储值的,所以遍历map集合无非就是获取键和值,根据实际需求,进行获取键和值. 1.无非就是通过map.keySet()获取到值,然后根据键获取到值. for(String s ...
- Robot Framework--连接Mysql数据库
1.安装Database-Library 输入命令:pip install robotframework_databaselibrary 2.添加Database的Library 3.实例 *** T ...
- JSOI2009 密码 和 JSOI2007 文本生成器 和 ZOJ3545 Rescue the Rabbit
密码 众所周知,密码在信息领域起到了不可估量的作用.对于普通的登陆口令,唯一的破解 方法就是暴力破解一逐个尝试所有可能的字母组合,但这是一项很耗时又容易被发现的工 作.所以,为了获取对方的登陆口令,在 ...