JavaSE知识点复习(下)

一、集合框架和泛型
1、Java集合框架提供了一套性能优良、使用方便的接口和类,位于java.util包中。

如上图所示,为Java集合框架图。
(1)Collection接口是最基本的集合接口,可以存储一组 不唯一无序的对象。
(2)List接口存储一组 不唯一有序的对象。
(3)Set接口存储一组 唯一无序的对象。
(4)Map接口存储一组成对的键(key)——值(value)对象,提供key到value的映射。
2、List接口
List接口常用的实用类由ArrayList和LinkedList。
(1)ArrayList集合类,实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率较高。
ArrayList类常用的方法:
boolean add(Object o):在列表的末尾添加元素o,起始索引位置从0开始
void add(int index,Object o):在指定的索引位置添加元素o,索引位置必须介于0和列表中元素个数之间
int size():返回列表中的元素个数
Object get(int index):返回指定索引位置的元素,取出的元素是Object类型的,使用前需要进行强制类型转换
void set(int index,Object obj):将index索引位置的元素替换为obj元素
boolean contains(Object o):判断列表中是否存在指定元素o
int indexOf(Object obj):返回元素在集合中出现的索引位置
boolean remove(Object o):从列表中删除元素o
Object remove(int index):从列表中删除指定位置的元素,起始索引位置从0开始
(2)LinkedList类采取链表存储方式存储数据。在插入、删除元素时效率比较高。
LinkedList类的常用方法:
void addFirst(Object obj):将指定元素插入到当前集合的首部
void addLast(Object obj):将指定元素插入到当前集合的尾部
Object getFirst():获得当前集合的第一个元素
Object getLast:获得当前集合的最后一个元素
Object removeFirst:移除并返回当前集合的第一个元素
Object removeLast:移除并返回当前集合的最后一个元素
3、Set接口
Set接口常用的实用类有HashSet。
HashSet类的常用方法:
boolean add(Object o):如果Set中尚未包含指定元素o,则添加指定元素o
void clear():从Set中移除所有元素
int size():返回Set中的元素的数量(Set的容量)
boolean isEmpty():如果Set不包含任何元素,则返回true
boolean contains(Object o):如果Set包含指定元素o,则返回true
boolean remove(Object o):如果指定元素o存在于Set中,则将其移除
4、Map接口
Map接口中最常用的实现类是HashMap,其优点是查询指定元素效率高。
Map接口的常用方法:

Object put(Object key,Object value):将互相关联的一个value放入该集合,如果此Map接口中已经包含了key对应的value,则旧值将被替换

Object remove(Objcet key):从当前集合中移除与指定key相关的映射,并放回该key关联的就value。如果没有任何关联,则返回null
Object get(Object key):获得与key相关的value。如果该key不关联任何非null值,则返回null
boolean containsKey(Object key):判断集合中是否存在key
boolean containsValues(Object values):判断集合中是否存在value
boolean isEmpty():判断集合中是否存在元素
void clear():清除集合中所有元素
int size():返回集合中元素的数量
Set keySet():获取所有key的集合
Collection values():获取所有value的集合
5、Iterator接口
Iterator接口表示对集合进行迭代的迭代器。Iterator接口为集合而生,专门实现集合的遍历。
hasNext():判断是否存在下一个可访问的元素,如果仍有元素可以迭代,则返回true
next():返回要访问的下一个元素
凡是由Collection接口派生而来的接口或者类,都实现了inerate()方法,interate()方法返回一个Iterator对象。
6、Collections类
Collections类是Java提供的一个集合操作工具类,他包含了大量的静态方法,用于实现对集合元素的排序、查找和替换。
Collections和Collection是不同的,前者是集合的操作类,后者是集合的接口。
7、泛型
将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性,这就是泛型。泛型的本质就是参数化类型。
(1)泛型的定义语法格式:
类1或者接口 <类型实参> 对象 = new 类2 <类型实参>();(首先,“类2”可以是“类1”本身,可以是“类1”的子类,还可以是接口的实现类;其次,“类2”的类型实参必须与“类1”中的实参类型相同。
(2)JDK1.5中引入泛型,使用泛型集合在创建集合对象时指定集合中元素的类型,从集合中取出元素时无需进行强制类型转换,并且如果把非指定类型对象放入集合,会出现编译错误。
(3)定义泛型类、泛型接口、泛型方法
泛型类:访问修饰符 class className<TypeList>
泛型接口:访问修饰符 interface interfaceName<TypeList>
泛型方法:访问修饰符 <类型参数> 返回值 方法名(类型参数列表)
当一个泛型中,需要声明多个类型参数时,只需要在每个类型参数之间使用逗号将其可开即可。
面向对象的特性同样适用于泛型类
二、实用类
1、枚举
枚举是由一组固定的常量组成的类型。使用关键字enum定义。
枚举语法格式:
[Modifier(访问修饰符)] enum enumName{
enumContantName1,enumContantName2,…//表示枚举常量列表,之间用逗号隔开
//[field,method]表示其他成员,,如果有其他成员,枚举常量列表后必须加(;)
}
枚举可以使代码更易维护,便于输入,更清晰。
2、包装类
包装类作为和基本数据类型对应的类的存在,方便对象的操作。jdk1.5之后编译器会自动实现基本数据类型和包装类之间的转换,但一般,包装类对象只有在基本数据类型需要用对象表示时才使用。
3、Math类
java.lang.Math类提供了一些基本数学运算和几何运算的方法。此类是final类,类中的所有方法都为static。常见方法:
static double abs(double a):返回double值的绝对值。
static double max(double a,double b):返回两个double值中较大的一个。
static double random():返回一个随机的double值,该值为0.0~1.0之间。
4、String类
在java中,字符串被作为String类型的对象来处理。
String:字符串常量,是不可变的对象,在每次对String类型进行改变时其实都等同于生成了一个新的String对象,然后指向新的String对象。
length():返回字符串长度。equals():判断字符串是否相等。equalsIgnoreCase():忽略大小写的字符串比较。toLowerCase():转换字符串中的英文字符为小写。toUpperCase():转换字符串中的英文字符为大写。concat():字符串的连接。
public int indexOf(int ch/String value):搜索并返回第一个出现字符ch(或字符串value)的位置。
public int lastIndexOf(int ch/String value):搜索并返回一个出现字符ch(或字符串value)的位置。
public String substring(int index):提取从指定索引位置开始的部分字符串。
public String substring(int beginindex,int endindex):提取两索引之间的字符串。
public String trim():截取字符串前后的空格后返回新的字符串。
split(separator,limit):字符串拆分。
     StringBuffer类
StringBuffer:字符串变量,是可变的字符串,在每次对StringBuffer对象进行改变时,会对其对象本身进行操作,再改变对象引用
append():追加字符串。insert():插入字符串。
     StringBuilder类
StringBuilder:字符串变量,jdk1.5后提供,与StringBuffer类等价,区别在于StringBuffer类是线程安全的,StringBuilder类是单线程的,不提供同步,理论上效率更高。
5、日期操作类
java.util包中提供的和日期相关的类有Date类、Calendar类和SimpleDateFormat类等。
Date类:使用最多的是获取系统当前的日期和时间。
Date date = new Date();//使用系统当前时间创建对象。
Calendar类:abstract类,提供一些方法和静态字段来操作日历。
Calendar calendar = Calendar.getInstance();//通过静态方法获取Calendar类的对象。
int get(int field):返回给定日历字段的值。
YEAR:指示年。MONTH:指示月。DAY_OF_MONTH:指示一个月中的某天。DAY_OF_WEEK:指示一个星期中的某天。
DateFormat类:abstract类,格式化日期时间,使用较大的是其子类SimpleDateFormat类。
Date date = new Date();//获取当前时间
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//指定一种时间格式
System.out.println("当前时间为:"+formater.format(date));//以规定的格式输出
formater.parse():将字符串转为时间,格式必须对应,用cry-catch防止异常
6、Random类
Random类用来生成随机数。Random rand = new Random();以当前时间戳为种子。用同一个种子值来初始化的Random对象,对象调用相同方法得到的随机数是相同的。
三、Java I/O
java.io包中提供了一些接口和类,对文件进行基本的操作,包括对文件和目录属性的操作、对文件读写的操作等。
1、File类操作文件或目录
File类构造方法:
File(String pathname):用指定的文件路径构造文件。
File(String dir,String subpath):在指定的目录下创建指定文件名的文件。
File(File parent,String subpath):根据一个对象和一个字文件构造文件对象。
File类的常用方法:
boolean exists():测试文件是否存在。
String getAbsolutePath():返回此对象表示的文件的绝对路径。
String getName():返回此对象表示的文件的名称。
String getParent():返回此对象的路径名的上一级,如果没有,则返回null。
boolean delete():删除此对象指定的文件。
boolean createNewFile():创建空文件,不创建文件夹。
boolean isDirectory():测试此对象表示的是否是目录。
boolean mkdir():创建一个目录,它的路径名由当前File对象指定。
boolean mkdirs():创建包括父目录的目录。
2、Java的流
java.io包中提供了许多输入/输出流的API,输出流主要由OutputStream和Write作为基类,而输入流主要由InputStream和Reader作为基类。
字节流:基类是InputStream类和OutputStream类,它们是抽象类。
InputStream
int read():从输入流中读取单个字符。
int read(byte[] c):读取字符,保存到字符数组c中。
int read(char[],int off,int len)
void close():关闭流。
FileInputStream
new FileInputStream(File file(文件))
new FileInputStream(String path(路径))
OutputStream
void write(int c):将指定的字节数据写入此输出流中。
void write(byte[] buf)
void write(byte[] b,int off,int len)
void close()
void flush():刷新输出流,强制将缓冲区清空。
FileOutputStream
new FileOutputStream(File file)
new FileOutputStream(String path)
new FileOutputStream(String path,boolean append):可以指定覆盖或追加文件内容。
字符流:适合用来处理字符串和文本,,基类是Reader类和Writer类,它们也是抽象类。
Reader
read()
read(char[])
read(char[],off,len)
close()
InputStreamReader:可以指定字符编码格式。
new InputStreamReader(InputStream)
new InputStreamReader(InputStream,String charSetName)
FileReader:无法指定编码格式,会按照文件系统默认编码格式读。
new FileReader(File file)
new FileReader(String path)
BufferdReader和FileReader,带缓冲区。
常见问题:中文乱码
原因:文件编码格式 和 程序环境的编码格式不一致
解决方案:字符流去读的时候,指定字符流的编码格式
System.out.println(System.getProperty("file.encoding"));输出系统默认的文件编码格式。
字符流的方法和字节流很相似,字符流在操作时使用了缓冲区(内部存储器),而字节流在操作时直接操作文件,不会使用缓冲区。
所有的这些方法在出现错误时都会抛出IOException异常。
Writer
write(String)
close()
flush()
OutputStringWriter:可以指定字符编码格式。
new OutputStreamWriter(OutputStream)
new OutputStreamWriter(OutputStream,String charSetName)
FileWriter:以下两种构造,都可以重载,指定一个boolean类型的参数,用来指定是追加还是覆盖这个文件。
new FileWriter(File file)
new FileWriter(String path)

                BufferdWriter和FileWriter,带缓冲区。

                二进制文件的读写:DataInputStream和DetaOutputStream类

                序列化和反序列化:Java中只有实现了java.io.Serializable接口的类的对象才能被序列化。

                ObjectOutputStream,ObjectInputStream。可以用transient来修饰某些属性限制序列化。

四、其实,这一部分的内容还有很多,强大的Java给我们提供了多种多样的类库,大大提高了我们编程的效率和质量。所以我们要熟练掌握常用的API,熟练通过Java的API帮助文档去了解我们要用的类、方法等等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值