1、Java集合类详解
Collection接口:
- 集合可以理解为一个动态的对象数组,不同的是集合中的对象内容可以任意扩充。
- 集合的特点:1、性能高。 2、容易扩展和修改。
- Collection的常用子类: List Set Queue
List接口:
- List接口可以存放任意的数据,而且在List接口中的内容是可以重复的。
- List接口常用子类: ArrayList 和 Vector 。
- 常用操作:(1)、判断集合是否为空:Boolean isEmpty()(2)、查找指定对象是否存在:int indexOf(Object o)。若存在,返回值为元素所在位置序列号。若不存在,返回值为-1。
ArrayList与Vector的区别:
比较 | ArrayList | Vertor |
---|---|---|
推出时间 | JDK1.2之后推出 | JDK1.0推出 |
性能 | 采用异步处理方式,性能高 | 采用同步处理方法,性能低 |
线程安全 | 属于非线程安全 | 属于线程安全 |
例如:
1 | package java进阶; |
Set接口:
- Set接口中不能加入重复元素,但可以排序。
- Set接口常用子类:(1)散列存放:HashSet。(2)有序存放:TreeSet.
例如:
1 | package java进阶; |
Iterator接口:
- 集合输出的标准操作: 标准做法,使用Iterator接口。
- 操作原理:Iterator是专门的迭代输出接口,迭代输出就是讲元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出。
其接口下定义如下:
1 | public interface Iterator { |
其中:
- Object next():返回迭代器刚越过的元素的引用,返回值是Object,需要强制转换成自己需要的类型
- boolean hasNext():判断容器内是否还有可供访问的元素
- void remove():删除迭代器刚越过的元素
对于我们而言,我们只一般只需使用next()、hasNext()两个方法即可完成迭代。如下:
1 | for(Iterator it = c.iterator(); it.hasNext(); ) { |
例如:
1 | package java进阶; |
Map接口:
- Map用于保存具有映射关系的数据(key-vlaue)。Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false
- Collection 接口是保存单值最大的父接口,那么 Map接口保存的内容是一对值,所有的内容是以:key->value 的形式保存的。
- 常用子类:(1)HashMap:无序存放,key不允许重复。(2)Hashtable:无序存放,key不允许重复.
HashMap与Hashtable的区别:
区别点 | HashMap | Hashtable |
---|---|---|
推出时间 | 在JDK1.2之后推出的,属于新的类 | 在JDK1.0是推出的,属于旧的类 |
操作 | 采用异步的出来操作 | 性能相对较低 |
性能 | 性能高 | 性能相对较低 |
安全 | 非线程安全的操作 | 线程安全 |
Map接口中定义如下方法:
方法 | 描述 |
---|---|
void clear() | 删除Map对象中所有key-value对。 |
boolean containsKey(Object key) | 查询Map中是否包含指定key,如果包含则返回true。 |
boolean containsValue(Object value) | 查询Map中是否包含一个或多个value,如果包含则返回true。 |
Set entrySet() | 返回Map中所有包含的key-value对组成的Set集合,每个集合元素都是Map.Entry(Entry是Map的内部类)对象。 |
Object get(Obejct key) | 返回指定key所对应的value;如果此Map中不包含key,则返回null。 |
boolean isEmpty(): | 查询该Map是否为空(即不包含任何key-value对),如果为空则返回true。 |
Set keySet() | 返回该Map中所有key所组成的set集合。 |
Object put(Object key, Object value) | 添加一个key-value对,如果当前Map中已有一个与该key相等的key-value对,则新的key-value对会覆盖原来的key-value对。 |
Object remove(Object key) | 删除指定key对应的key-value对,返回被删除key所关联的value,如果该key不存在,返回null。 |
int size() | 返回该Map里的key-value对的个数。 |
Collection values() | 返回该Map里所有value组成的Collection。 |
例如:
1 | package java进阶; |
2、Java本地文件操作
文件的创建、重命名、删除:
1 | package java进阶; |
文件夹的创建、重命名、删除:
1 | package java进阶; |
获取文件的属性:
1 | package java进阶; |
文件属性的设置:
1 | package java进阶; |
文件的遍历:
1 | package java进阶; |
程序执行结果:
1 | |---.classpath |
文件的简单读写:
1 | package java进阶; |
3、Java中的IO操作
Java IO简介:
- IO也写作“I/O”,可理解为In和Out,即输入与输出。所有,IO体系的基本功能就是:读和写。
- IO流作用:读写设备上的数据,硬盘文件、内存、键盘、网络···
- 根据数据的走向,可以分为:输入流、输出流。
- 根据处理的数据类型,可分为:字节流、字符流。
字节流与字符流:
- 字节流可以处理所有类型的数据,如MP3、图片、文字、视频等。在读取时,读到一个字节就返回一个字节。在Java中对应的类都以“Stream”结尾。
- 字符流仅能够处理纯文本数据,如txt文本等。在读取时,读到一个或多个字节,先查找指定的编码表,然后将查到的字符返回。在Java中对应的类都以“Reader”或“Writer”结尾。
字符、字节与编码的区别:
说明 | 举例 | |
---|---|---|
字符 | 人们使用的记号,抽象意义上的一个符号。 | “1”,”中”,”a” |
字节 | 计算机中的存储数据的单元,一个8位的二进制大数,是一个很具体的存储空间。 | 0x01,0x45 |
ANSI编码 | 系统预设的标准文字存储格式,不是具体的某一种编码,不同的国家和地区使用不同的标准。ANSI编码的一个字符可能使用一个字节或多个字节来表示。 | “中文123”(7Byte) |
Unicode编码 | 为了是国际间信息交流更加方便,国际组织制定了Unicode字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编码,以满足跨语言、跨平台进行文本转换、处理的要求。 | 中文123”(10Byte) |
字符集(Charset) | 字符集,也称作“编码”。 |
使用文件流读写文件:
1 | package java进阶; |
4、Java多线程编程:
线程与进程:
- 线程:程序中单独顺序的控制流。特点:(1)线程本身依靠程序进行运行。(2)线程是程序中的顺序控制流,只能使用分配给程序的资源和环境。
- 进程:执行中的程序。(1)一个进程可以包含一个或多个线程。(2)一个进程至少要包含一个线程。
- 单线程:程序中只存在一个线程,实际上主方法就是一个主线程。
- 多线程:(1)多线程是一个程序中运行多个任务。(2)多线程的母的是为了更好的使用CPU资源。
线程的实现:
在Java中,线程的实现有2种。(1)继承Thread类。(2)实现Runnable接口。
Thread类:是在Java.lang包中定义的,继承Thread类必须重写run()方法。定义格式:
1
2
3class className extends Thread{
run(){};
}Runnable接口
例如:
通过继承Thread类实现线程:
1 | package java进阶; |
通过Runnable接口实现线程:
1 | package java进阶; |
用过主函数调用方法:
1 | package java进阶; |
线程的状态:
线程有固定的操作状态:
- 创建状态:准备好了一个多线程的对象。
- 就绪状态:调用start()方法,等待CPU进行调度。
- 运行状态:执行run()方法。
- 阻塞状态:暂时停止执行,可能将资源交给其他线程使用。
- 终止状态(死亡状态): 线程销毁。
线程的常用方法:
- 取得线程名称:getName();
- 取得当前线程对象:currentThread();
- 判断线程是否启动:isAlive();
- 线程的强行运行:join();
- 线程的休眠:sleep();
- 线程的礼让:yield();
例如:
1 | package java进阶; |
线程优先级:
- MIN_Priority—1
- MAX_Priority—10
- NORM——Priority—5. 默认值为5
- 注意:线程优先级不是一定按优先级执行。而是提高了执行概率。
1 | t1.setPtiority(Thread.MIN_PRIOITY); |
同步与死锁:
同步代码块:在代码块上加上“synchronized”关键字,则此代码块就称为同步代码块。
同步代码块格式:
1
2
3synchronized(同步对象){
需要同步的代码块;
}同步方法:除了代码块可以同步,方法也可以同步。
方法同步的格式:synchronized void 方法名称(){}
同步实现了资源的共享。
死锁:死锁是两个甚至多个线程被永久阻塞时的一种运行局面,这种局面的生成伴随着至少两个线程和两个或者多个资源。
1 | package java进阶; |