本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与
一、集合框架及泛型
1、集合框架
是一套性能优良、使用方便的接口和类(位于java.util包中)解决数组在存储上不能很好适应元素数量动态变化,查找效率低的缺陷
集合接口: Map、Collection(子接口List、Set) 、 Iterator
接口实现类:HashMap TreeMap 、ArrayList LinkedList、 HashSet TreeSet 实现map、list、set接口
集合工具类:Arrays 、Collections 提供对集合元素进行操作的算法
2、接口的区别
Collection 接口存储一组可重复,无序的对象(包括List Set接口)
通用方法:clear() 清除元素 isEmpty()判断集合是否为空
iterator() 获得集合的迭代器 toArray()集合转换为数组
List 接口存储一组可重复,有序的对象
Set 接口存储一组唯一,无序的对象
Map接口存储一组键值对象,键是唯一的,Map和Set很像
3、题外话:
如果在学习过程中遇到任何问题,可以看下我的公告栏,小编在线解答,助你起飞,还有我这段时间整理的一些Java学习手册,面试题,开发工具,PDF文档书籍教程,需要的话都可以免费分享!
4、接口实现类
ArrayList:在内存中分配连续的空间。根据下标遍历元素和随机访问元素的效率比较高,而增加和删除由于位置移动操作很慢
常用方法: add(Objiect o)在列表末尾顺序添加元素
get(int index) 返回指定索引位置处的元素
size() 返回列表中的元素个数
contains(Objiect o) 判断列表中是否存在指定元素
remove(Objiect o) 删除列表中的元素
LinkedList:采用链表存储方式。所有顺序查找的时候很慢,而插入、删除元素时无需移动位置,效率比较高
常用方法:addFirst(Objiect 0)在列表首部添加元素
addLast(Objiect 0)在列表尾部添加元素
getFirst()获得当前集合的第一个元素
getLast()获得当前集合的最后一个元素
removeFirst() 删除并返回列表中的第一个元素
removeFirst()删除并返回列表中的最后一个元素
TreeSet|TreeMap比较:底层是二叉树结构;
TreeMap、TreeSet都保存了对象的排列次序;
TreeSet只存储一个对象,而TreeMap存储两个对象Key和Value;
存储速度比Hash集合慢。
HashSet|HashMap比较:底层数据结构为哈希表;
HashMap存储键值对,键唯一,而HashSet仅仅存储对象,对象唯一;
HashMap使用唯一的键来获取对象,速度相对较快。
HashSet集合方法:
add(Objiect o) 添加对象
size() 返回元素个数
contains(Objiect o) 判断是否存在
remove(Objiect o) 移除有关对象
HashMap集合方法:
put(key,value)添加键值对
get(key) 获取与key有关的值
remove(key) 移除与key有关的映射,并返回旧值
containsKey( ) containsValue( )判断是否存在key value
size()返回元素个数
keySet()获取所有key的集合
values()获取所有values的集合
5、集合遍历
三种方法:普通for循环 增强for循环 Iterator迭代器遍历
1.for (Object object : list) { System.out.println(object); }
2.for (int i = 0 ;i<list.size();i++) { int j= (Integer) list.get(i); System.out.println(j); }
3.Iterator iterator = list.iterator();while(iterator.hasNext()){
int i = (Integer) iterator.next(); System.out.println(i); }
Iterator方法:
HasNext()判断是否存在下一个可访问的元素,如果可以,返回true
Next() 返回要访问的下一个元素
6、Collections工具类
作用:实现对元素的排序、查找和替换操作
如果要比较一个类的对象之间的大小,必须要实现Comparable接口。
Comparable接口:对实现它的每个类的对象进行自然排序。
comparableTo(Object obj)方法:用于比较此对象与指定对象的顺序
返回值:0等于、1大于、-1小于指定对象obj
方法:
fill( ) 替换集合中所有元素为相同元素的方法
sort( ) 对集合进行排序的方法
binarySearch( ) 对集合进行查找的方法
max( )\min( ) 查找最大值、最小值
7、泛型集合
泛型即参数化类型,通过指定集合中的元素类型来实现约束
作用:将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性
举例:List<Integer> list=new ArrayList<Integer>( );
ArrayList<Student> students = new ArrayList<Student>();
典型的泛型集合:ArrayList<E>、HashMap<K,V>
泛型类: public class User<T>{}
泛型接口:public interface Pair<T>{}
泛型方法: public <T> void getMiddle(T[] b) {} 注意<T>的位置
在泛型中,基本类型是不可以做泛型参数,只能使用包装类、引用数据类型。
二、实用类
1、基本概念
Java API:Java应用程序的编程接口、Java帮助文档
实用类: 由Java API提供的常用类
学习这部分一定要多看 Java API 。Java帮助文档提供的常用包如下:
lang包:包含基础类和接口 如 Comparable接口 、包装类、 String、Math类
Util包:包含系统辅助类 如 Collection、Map接口、 Date、Arrays类
Io包: 与输入输出有关类 如 Serializable接口、File、Reader、Writer类
Net包:与网络有关类 如CookieStore接口 、Socket、URL、ServerSocket类
Sql包: 与数据库有关类 如 Statement接口、DriverManager、DriverPropertyInfo类
2、枚举
指由一组固定的常量组成的类型。使用enum关键字定义
举例:定义:public enum Genders{男,女} 调用:Genders.男
作用:类型安全、易于输入、代码清新
3、包装类
概念:把基本数据类型包装为对象,方便对象的操作,体现了java面向对象的特点。 ag:int→Integer char→Character byte→Byte
包装类作用:
方便在各种类型之间的转化 如:int类型和String类型互相转换
提供了基本数据类型的相关属性与方法 如:最小值、toString() 、valueOf()、equals()方法
常用方法:
toString():将基本数据类型转换为字符串类型
valueOf():静态的重载方法 将基本数据类型、字符串转换为包装类
parseInt()、parseBoolean():把字符串转换为相应基本数据类型
4、类型转换
基本类型转包装类:Integer i=5;或 Integer i=new Integer(5);或Integer i=new Integer(“5”);或Integer i=Integer.valueOf(“5”);
注意:除Character包装类外,都可以将字符串作为参数来构造实例
包装类转基本类型:int intId=id.intvalue();或int intId=id;
自动转换: Integer i=5;//装箱 基本→包装 int j=i;//拆箱 包装→基本
jdk 1.5以后,基本类型和包装类的转换,编译器会自动完成
5、String类
在Java中,字符串常被作为String类型的对象来处理。
创建String对象方法:
String a=”hello”或String a = new String(“hello”);
注意:第2个方法 ,创建了两个对象:一个”hello”字符串对象,在堆内存中;一个s对象,在栈内存中。
常用方法:
判断: equals():判断两个字符串的内容是否相同
equalsIgnoreCase():判断两个字符串的内容是否相同,不区分大小写
contains(String s):判断一个字符串中是否包含另一个字符串
endsWith(String s):测试此字符串是否以指定的后缀结束
startsWith(String s):测试此字符串是否以指定的前缀开始
isEmpty():测试字符串是否为空
获取: int length():返回此字符串的长度
char charAt(int index):返回指定索引处的char值(字符)
int indexOf():返回指定字符(串)在此字符串中第一次出现处的索引
int lastIndexOf(int c):返回指定字符在此字符串中最后一次出现的索引
String substring(int beginIndex, int endIndex)返回一个新字符串,它是此字符串的一个子字符串,包含头不包含尾。
转换: byte[] getBytes():从字符串到字节数组的方法
char[] toCharArray():从字符串到字符数组的方法
String valueOf(数据类型):把该数据类型的数据转换成字符串
String toLowerCase():把字符串转换成小写
String toUpperCase():把字符串转换成大写
String concat(String str):将指定字符串连接到此字符串的结尾
替换分割: String replace(char oldChar, char newChar):用新字符替换旧字符
String[] split(String regex):根据指定的字符串把一个字符串分割成一个字符串数组
String trim():去除字符串的前后空格
int compareTo(String anotherString)按字典顺序比较两个字符串
int compareToIgnoreCase(String str)按字典顺序比较两个字符串,不考虑大小写
6、StringBuffer
相当于给字符串一个缓冲区,是String的增强类。对字符串频繁修改(如字符串连接)时,使用StringBuffer类可以大大提高程序执行效率。
StringBuffer声明
StringBuffer strb = new StringBuffer();
StringBuffer strb = new StringBuffer(“aaa”);
常用方法:
增加:append(“**”):追加各种类型的数据到字符串之后
insert (1, “**”): 在容器指定位置插入各种类型的数据
删除:deleteCharAt() : 删除指定位置的字符
delete(): 清空StringBuffer的缓冲区
替换:replace():用新字符替换旧字符
toString():将StringBuffer类型的字符串转换为String类型的对象
获取:charAt() :返回指定索引处的char值(字符串)
length():返回此字符串的长度
JDK5.0后提供了StringBuilder,等价StringBuffer。但是是单线程的,效率相对较高,但是不保证线程安全。
7、Math类
提供了常用的数学运算方法和两个静态常量E(自然对数的底数)和PI(圆周率)
常用方法:
abs():返回绝对值;
max():返回最大值;
random():返回随机数
ag:生成[0,10)区间的整数 int random = (int)(Math.random()*10);
8、Random类
是产生随机数的一个类
常用方法:
构造方法
Random() 创建一个新的随机数生成器。
Random(long seed) 使用单个种子创建一个新的随机数生成器。
注意:种子数只是随机算法的起源数字,和生成的随机数字的区间无关
ag:Random rand = new Random(10);
成员方法
int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt(int n) 返回一个伪随机数,该值介于[0,n)的区间。
ag:生成[0,10)区间的整数 int num = rand.nextInt(10);
11、Scanner类
位于java.util包,是获取从键盘的输入数据的一个类
构造方法
Scanner(InputStream source) 创建一个用来解析基本类型和字符串的文本扫描器
ag:Scanner sc = new Scanner(System.in);
成员方法
hasNext() 判断扫描器中当前扫描位置后是否还存在下一段。
hasNextLine() 如果在此扫描器的输入中存在另一行,则返回 true。
nextInt() 将输入信息的下一个标记扫描为一个int,接受整型变量。
next() 以换行或空格符为分界线接收下一个String类型变量。如:输入hello world!,接收到的只是hello
nextLine() 以换行为分界线接收下一个String类型变量。如:输入hello world!,接收到的是hello word!
12、Date类
位于java.util包,表示日期和时间的类
构造方法
Date() 分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
Date(long date) 分配Date对象并初始化此对象,以表示从标准基准时间(即1970年1月1日00:00:00GMT)以来的指定毫秒数。
成员方法
int compareTo(Date anotherDate) 比较两个日期的顺序
boolean equals(Object obj) 比较两个日期的相等性。
13、SimpleDateFormat类
位于java.text包,格式化和解析日期的具体类
固定写法:
//创建日期对象 Date date = new Date();
//定制日期格式 SimpleDateFormat f= new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String now = f.format(date); System.out.println(now);
14、Calendar类
位于java.util包,用于设置和获取日期/时间数据的特定部分
int get(int field) 返回给定日历字段的值
YEAR 指示年 MONTH 指示月
DAY_OF_MONTH 指示一个月中的某天
DAY_OF_WEEK 指示一个星期中的某天
三、输入/输出和反射
1、File类
位于java.io包,用来操作文件目录和属性
构造方法:
File(String pathname)指定文件路径
File(String dir,String subpath)dir参数指定目录路径,subpath参数指定文件名
File(File parent,String subpath)parent参数指定目录文件,subpath参数指定文件名
常用方法:
创建:
boolean createNewFile( ) 创建名称的空文件,不创建文件夹
boolean mkdir() 创建由该File对象表示的目录(一级文件夹)
boolean mkdirs() 创建包括父目录的目录(二级文件夹)
判断:
boolean exists( ) 判断文件或目录是否存在
boolean isFile( ) 判断是否是文件
boolean isDirectory( ) 判断是否是目录
获取:
String getPath( ) 返回此对象表示的文件的相对路径名
String getAbsolutePath( ) 返回此对象表示的文件的绝对路径名
String getName( ) 返回此对象表示的文件或目录的名称
String getParent() 返回此对象父目录的路径名;
long length() 返回文件的长度,单位为字节, 如果文件不存在,则返回0L
删除:
boolean delete( ) 删除此对象指定的文件或目录
2、相对路径与绝对路径
相对路径:从中间目录出发,到目前位置路径。
绝对路径:从根目录出发,到目前位置的路径。
3、Java IO流
指二进制的字节序列,是一连串流动的字符,是以先进先出方式发送信息的通道
分类:
(1)按照流操作的数据类型分为:字节流和字符流。
字节流是8 位通用字节流,字符流是16位Unicode字符流
(2)按照流的流向分为:输入流,输出流(相对计算机程序而言,先入后出、先读后写)
源数据源(键盘、硬盘)→输入流(读)→程序→输出流(写)→目标数据源(控制台)
4、IO流常用基类
注意:( )里面是子类 如File**类,Buffered**类
Buffered**类带有缓冲区,有按行读取内容的readLine()方法
字节流
字节输入流:InputStream (FileInputStream、BufferedInputStream)
字节输出流:OutputStream (FileOutputStream、BufferedOutStream)
字符流
字符输入流:Reader (FileReader、BufferedReader)
字符输出流:Writer (FileWriter、BufferedWriter)
5、常用基类的方法
字节输入流InputStream类方法
void close() 关闭此输入流并释放与该流关联的所有系统资源
int read() 读取一个字节数据
int read(byte[] b) 读取一定数量的字节,并将其存储数组中
int read(byte[] b, int off, int len) 将输入流中最多 len 个数据字节,保存到字节数组b中
字节输出流OutputStream类方法
void close() 关闭此输出流并释放与此流有关的所有系统资源
write(int b) 写入一个字节数据
void write(byte[] b) 写入数组b的所有字节
void write(byte[] b, int off, int len)将字节数组中从偏移量 off 开始的 len 个字节写入到输出流
字符输入流Reader类方法
void close() 关闭输入流
int read() 读取单个字符
int read(char[] c) 将c.length长度的字符读入数组c中
int read(char[] c, int off, int len) 将最多len长度的字符读入数组c,保存位置从off位置开始
字符输出流Writer类方法
void close() 关闭输出流
void flush() 刷新输出流
int read() 读取单个字符。
int read(char[] cbuf) 将字符读入数组
int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分
6、节点流与包装流
节点流:创建对象时,参数是字符串或File类对象
包装流:创建对象时,参数是流对象。
包装的作用:1.提高效率 2.方便书写代码
7、使用字节流读写文本文件
使用FileInputStream 读文本文件
//构造字节输入流对象
FileInputStream fis= new FileInputStream(“c:\\test.txt”);
//循环读取文件数据 最后关闭流对象fis.close();
System.out.println(“可读取的字节数”+fis.available());
byte []buf = new byte[1024]; int len=0;
while((len=fis.read(buf))>0){ System.out.write(buf, 0, len); }
使用FileOutputStream 写文本文件
//构造字节输入流对象
FileOutputStream fos=new .........