一、Java集合框架
1、集合框架
(1)动态的数组,不指定长度的数组
(2)jdk工具库提供的组件,位于java.util.*
2、集合框架的体系结构
(1)Collection接口 存储无序的、不唯一的数据;其下有List和Set两大接口
(2)子接口类List接口和Set接口
1)List接口(存储有序的、不唯一的数据)的实现类(子类)
ArrayList(可变数组集合)和LinkedList(链表集合)--有序集合
(加入到集合中的元素都会分配一个索引位置)
2)Set接口(存储无序的、唯一的数据)的实现类(子类)
HashSet和TreeSet(带有排序功能)----无序集合(加入到集合中的元素无索引位置,对象元素是唯一的)
(3)Map接口集合(由键值对构成的集合)
1)实现类为HashMap和TreeMap(排序功能)
2)以键值对的方式存储数据,以键取值,键不能重复,但值可以重复
4、集合框架的工具类
Collections和Arrays
二、有序集合List集合
1、List集合常用方法
(1)创建List集合对象
List<元素类型> list=new ArrayList<元素类型>();
<元素类型>:表示集合中只能放置指定类型的对象元素
例如:
List<String> ls=new ArrayList<String>();
List<Student> ls=new ArrayList<Student>();
(2)常用方法
1)添加对象到集合
list.add(对象元素);
2)设置指定索引位置的对象到集合
list.set(索引位置,对象元素);
3)从集合移除指定索引位置的对象
list.remove(索引位置);
4)获取索引位置的元素对象
元素类型 对象=list.get(索引位置);
5)获取集合的长度(集合中元素的个数)
int size=list.size();
6)判断集合中是否存在对象元素
boolean flag=list.isEmpty();
flag为真,表示无元素;
flag为false,表示有元素
三、Set集合常用方法和使用方式
1、创建Set集合的方法
Set<元素类型> myset=new HashSet<元素类型>();
2、常用方法
1)添加对象到集合
myset.add(对象元素);
2)从集合移除指定的对象
myset.remove(对象元素);
3)获取集合的长度(集合中元素的个数)
int size=myset.size();
4)将Set集合转为对象数组
Object[] obs=myset.toArray();
5)判断集合中是否存在对象元素
boolean flag=myset.isEmpty();
flag为真,表示无元素
flag为false,表示有元素
3、迭代器Iterator
(1)主要用于从集合容器中遍历对象元素
(2)从Set集合中获取迭代器对象
Iterator<元素类型> it=myset.iterator();
(3)Iterator常用的方法
1)判断集合中是否存在对象元素
boolean flag=it.hasNext();
2)获取对象元素的值
元素类型 对象=it.next();
注意:在使用Iterator变异集合元素时,不能对元素进行增、删、改的操作
4、泛型循环
(1)泛型
特指特定的集合元素类型,限制集合的元素类型只能是特定的类型
(2)泛型循环的语法
for(元素类型 对象:集合或者数组){
......
}
四、Map集合
1、由键值对构成的集合
2、Map集合常用的方法
(1)创建Map集合的方法
Map<主键类型,值类型> map=new HashMap<主键类型,值类型>();
(2)Map集合的常用方法
1)添加和修改元素
map.put(主键,值对象);
2)根据键移除对象
map.remove(主键);
3)获取集合元素的个数
int size=map.size();
4)获取主键集合
Set<Object> keys=map.keySet();
5)获取值集合
Collection<Object> collection=map.values();
6)根据主键获取值对象
值类型 对象=map.get(主键);
五、Collections类常用方法
Collections和Collection不同,前者是集合的操作类,后者是集合接口
Collections提供的常用静态方法
sort():排序
binarySearch():查找
max()\min():查找最大\最小值
六、Java泛型集合
所谓泛型就是允许在定义类、接口时指定类型形参,这个类型形参将在声明变量、创建对象时确定
泛型的格式:通过<>来定义要操作的引用数据类型
典型泛型集合ArrayList<E>、HashMap<K,V>,<E>、<K,V>
表示该泛型集合中的元素类型,除了指定了集合中的元素类型外,泛型集合和之前学习的集合的用法完全一样
使用泛型的好处:
1、将运行时期出现的ClassCastExcpetion ,转移到了编译时期。方便于程序员解决问题,让运行时期问题减少
2、避免了强制转换的麻烦
七、Java的包装类
1、Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类。 包装类把基本类型数据转换为对象,每个基本类型在java.lang包中都有一个相应的包装类
2、包装类的继承关系 3、基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:装箱:从基本类型转换为对应的包装类对象
拆箱:从包装类对象转换为对应的基本类型
八、其他实用类
1、Math类
java.lang.Math类提供了常用的数学运算方法和两个静态常量E(自然对数的底数)和PI(圆周率)
2、Random类
java.util.Random类生成随机数
3、String类
String类位于java.lang包中,具有大量的方法计算字符串的长度、比较字符串、连接字符串、提取字符串等等
(1)、String类提供了length( )方法,确定字符串的长度
(2)、String类提供了equals( )方法,比较存储在两个字符串对象的内容是否一致
equals( ):检查组成字符串内容的字符是否完全一致
==:判断是否是同一个字符串对象,判断两个字符串在内存中的地址
(3)、字符串比较的其他方法:
equalsIgnoreCase()方法、toLowerCase()方法、toUpperCase()方法
(4)、字符串常用提取方法:
public int indexOf(int ch)
public int indexOf(String value)
//搜索第一个出现的字符ch(或字符串value),如果没有找到,返回-1
public int lastIndexOf(int ch)
public int lastIndexOf(String value)
//搜索最后一个出现的字符ch(或字符串value),如果没有找到,返回-1
public String substring(int index)
//提取从位置索引开始的字符串部分
public String substring(int beginindex, int endindex)
//提取beginindex和endindex之间的字符串部分
public String trim()
//返回一个前后不含任何空格的调用字符串的副本
九、Java日期类的使用
1、位于java.util包 ,使用时需导入java.util.*
2、日期类Date类
(1)创建日期类对象
Date date=new Date();
(2)日期类的常用方法
1)获取当前本地化日期
String sdate=date.toLocaleString();
2)获取年月日
int year=date.getFullYear();
int month=date.getMonth();
int day=date.getDate();
3、将字符串转为日期类型
(1)使用java.text包中的SimpleDateFormat类进行格式转换
1)创建日期格式化类对象,并指定日期格式
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
转化1990-01-01这种格式的字符串日期
2)常用方法
a、将字符串转为日期
Date date=dateFormat.parse(日期格式的字符串);
b、将日期转为指定的字符串格式
String sdate=dateFormat.format(Date类型的对象);
十、输入输出流
1、流的定义
内存中的数据按照指定的顺序和方向进行流动,称之为流
2、Java流的分类
从磁盘文件向应用程序的内存流动的数据集称为输入流(读取磁盘文件的数据到内存)
4、输出流
从应用程序的内存向磁盘文件流动的数据集称为输出流(将内存的数据保存到磁盘)
5、文件类File
(1)java.io包
(2)创建文件对象,并指定要操作的文件路径
File file=new File("文件的路径");
例如:
File file=new File("d:\\aa.txt");
(3)文件的常用方法
1)判断制定的文件路径是否存在
boolean flag=file.exists();
flag=true:表示存在,false表示不存在2)判断是文件还是目录
boolean flag=file.isFile();
flag=true:表示是文件flag=file.isDirectory();
flag=true:表示是目录(文件夹)3)获取文件名称
String fname=file.getName();
4)获取文件所在的路径
String path=file.getPath();
5)获取文件所在的绝对路径(带盘符)
String path=file.getAbsolutePath();
6)创建文件
file.createNewFile();
7)创建文件夹
file.mkdir();
8)删除文件
file.delete();
9)获取文件的长度
long size=file.length();
十一、字节流
A
1、字节输出流OutputStream(输出流的超类,写文本文件)
2、常用的字节输出流类
(1)文件字节输出流类FileOutputStream
(2)缓冲区字节输出流类BufferedOutputStream
(3)对象输出流类ObjectOutputStream
3、字节输出流的常用方法
(1)创建字节输出流对象
FileOutputStream fout=new FileOutputStream(File对象或者文件目标路径[,true]);//true表示增量写出(追加),false表示覆盖写出
(2)方法
`fout.write(int类型的值或者变量);//逐个字节写出数据到文件`
fout.write(byte[]);//写出字节数组数据到文件
fout.flush();//清除缓冲区数据
fout.close();//关闭输出流
B
1、字节输入流InputStream(输入流的超类,读文本文件)
2、常用的字节输入流类
(1)FileInputStream--文件字节数入流,读取指定位置的文件数据,向应用程序内存输入
(2)BufferedInputStream--缓冲区输入流类,加快输入流的读取速度
(3)ObjectInputStream--对象输入流类,从文件中读取存储的Java对象二进制数据,并转为Java对象
3、输入流的常用方法
创建输入流对象
FileInputStream fin=new FileInputStream(文件对象或者要读取的文件路径);
(1)获取输入流的大小
int leng=fin.available();
(2)读取输入流数据到字节数组中
fin.read(字节数组对象);
(3)逐个字节读取输入流中的数据
int b=fin.read();
(4)关闭输入流
fin.close();
十二、字符流
1、将流中的数据按照字符方式进行处理
2、字符流只能处理纯文本文档的数据(.txt、.html、.xml等能用记事本打开并能看懂的信息文档)
3、字符输入流Reader类(字符输入流类的超类)
(1)字符流的常用实现类
1)文件字符输入流FileReader
2)字符输入流缓冲区类BufferedReader
(2)常用方法
1)创建文件输入流对象
FileReader fr=new FileReader(文件对象或者要读取的文件路径);
2)常用方法
int c=fr.read();//逐个字符读取
fr.read(字符数组对象);//读取流中的数据到字符数组
fr.close();
4、字符输出流Writer类(字符输出流类的超类)
(1)常用的字符输出流实现类
FileWriter --文件字符输出流
BufferedWriter--缓冲区字符输出流
(2)常用方法
1)创建输出流类
FileWriter fw=new FileWriter(文件对象或者文件路径[,true]);
true表示增量写入
2)常用方法
fw.write(字符变量);//逐个字符写出到文件
fw.write(字符数组对象);//将输出流的数据写出到字符数组保存到文件
fw.write(字符串变量或者值);//写出字符串到文件存储
fw.flush();//刷新缓冲区
fw.close();//关闭
十三、字节流转字符流
1、将低8位的字节流转为高16位的字符流
2、字节输入流转为字符输入流并设置编码格式
InputStreamReader isr=new InputStreamReader(字节数入流对象,"编码格式");
这样就可以读取不同编码格式的字符数据
3、将字节输出流转为字符输出流
OutputStreamWriter osw=new OutputStreamWriter(字节输出流对象,"编码格式");
这样就可以写入不同编码格式的字符数据
十四、序列化与反序列化
1、序列化定义
将Java对象转为二进制字节数据的过程,称为序列化
2、序列化得主要目的是为将Java对象保存到文件中进行存储
3、序列化的实现方式
public class 实体类 implements Serializable{
属性...
...
}
4、反序列化
将保存在文件中的二进制Java对象流数据,转换为Java对象本身的过程称为反序列化
5、使用ObjectInputStream转换二进制对象为Java实体对象