java基础总结3

来源:互联网 发布:淘宝账号的心怎么涨 编辑:程序博客网 时间:2024/05/16 14:57

程序,进程,线程

程序:Program,是一个指令的集合

进程:Process,(正在执行中的程序)是一个静态的概念

进程是程序的一次静态态执行过程, 占用特定的地址空间.

每个进程都是独立的,由3部分组成cpu,data,code

缺点:内存的浪费,cpu的负担

线程:是进程中一个“单一的连续控制流程”  (a single sThread,equential flow of control)/执行路径

线程又被称为轻量级进程(lightweight process)

Threads run at the same time, independently of one another

一个进程可拥有多个并行的(concurrent)线程

一个进程中的线程共享相同的内存单元/内存地址空间à可以访问相同的变量和对象,而且它们从同一堆中分配对象à通信、数据交换、同步操作

由于线程间的通信是在同一地址空间上进行的,所以不需要额外的通信机制,这就使得通信更简便而且信息传递的速度也更快。

一个进程中至少有一个线程

 

ThreadRunnable

继承Thread类方式的缺点:那就是如果我们的类已经从一个类继承(如小程序必须继承自Applet 类),则无法再继承Thread

通过Runnable接口实现多线程

优点:可以同时实现继承。实现Runnable接口方式要通用一些。

1)避免单继承

2)方便共享资源 同一份资源 多个代理访问

 

对象流 ObjectinputstreamObjectOutputstream

1、类必须实现Serializable接口

2、给类加个序列化编号,给类定义一个标记,     

      新的修改后的类还可以操作曾经序列化的对象

3、静态是不能被序列化的,

     序列化只能对堆中的进行序列化 ,不能对“方

     法区”中的进行序列化

4、不需要序列化的字段前加 transient

 

Java流的分类

1

 

2

 

 

3功能不同

节点流:可以直接从数据源或目的地读写数据。

处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。目的主要是简化操作和提高性能。

节点流和处理流的关系

节点流处于io操作的第一线,所有操作必须通过他们进行

处理流可以对其他流进行处量(提高效率或操作灵活性)

 

各种流适用

文本文件的读写

FileInputStreamFileOutputStream读写文本文件

BufferedReaderBufferedWriter读写文本文件

 

二进制文件的读写

使用DataInputStreamDataOutputStream读写二进制文件以及基本数据类型数据的读写

 

对象的读写

  使用ObjectInputStreamObjectOutputStream读写对象(序列化与反序列化)

 

集合

Collection 接口存储一组不唯一,无序的对象

List 接口存储一组不唯一,有序(插入顺序)的对象

Set 接口存储一组唯一,无序的对象

Map接口存储一组键值对象,提供keyvalue的映射

 

List接口的实现类

凡是可以操作索引的方法都是该体系特有方法

ArrayList实现了长度可变的数组,在内存中分配连续的空间。

优点:遍历元素和随机访问元素的效率比较高

缺点:添加和删除需要大量移动元素效率低,按照内容查询效率低

 

LinkedList采用链表存储方式。

优点:插入、删除元素时效率比较高

缺点:遍历和随机访问元素效率低下

 

 

Iterator 接口

可以使用Iterator遍历的本质是什么?

实现Iterable接口

所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。

所有的集合类均未提供相应的遍历方法,而是把遍历交给迭代器完成。迭代器为集合而生,专门实现集合遍历

 

Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。

Iterator接口定义了3个方法:

boolean hasNext();  //判断是否有元素没有被遍历

Object next();      //返回游标当前位置的元素并将游标移动到下一个位置

void remove();      //删除游标左面的元素,在执行完next之后该

                    //操作只能执行一次

 

Set接口

Set接口存储一组唯一,无序的对象(存入和取出的顺序不一定一致)

操作数据的方法与List类似,Set接口不存在get()方法

 

offerFirst(Object obj) offerLast(Object obj)

pollFirst() pollLast()

peekFirst() peekLast()

link.getFirst();  //将元素移除后再取元素

 

HashSet: 采用Hashtable哈希表存储结构

优点:添加速度快,查询速度快,删除速度快

缺点:无序

LinkedHashSet  采用哈希表存储结构,同时使用链表维护次序

有序(添加顺序)

TreeSet 采用二叉树(红黑树)的存储结构

优点:有序(排序后的升序)查询速度比List快(按照内容查询)

缺点:查询速度没有HashSet

 

HashSet是如何保证元素的唯一性的呢?

 

:是通过元素的两个方法,hashCodeequals方法来完成

如果元素的HashCode值相同,才会判断equals是否为true

如果元素的hashCode值不同,不会调用equals方法

 

为什么需要泛型

解决数据类型操作不统一产生的异常

使用泛型可以更好的去保护数据类型

 

 

Map

特点key-value映射

HashMap Key无序 唯一(Set Value无序 不唯一(Collection)

LinkedHashMap 有序的HashMap 速度快

TreeMap 有序 速度没有hash

问题:SetMap有关系吗?

采用了相同的数据结构,只用于mapkey存储数据,以上是Set

 

增 put(key,value)

遍历 keySet() entrySet() values()

 

 

Collections工具类

CollectionsCollection不同,前者是集合的操作类,后者是集合接口

Collections提供的静态方法

addAll():批量添加

sort():排序

binarySearch():二分查找

fill():替换

shuffle():随机排序

reverse():逆续

 

集合和数组的比较

数组不是面向对象的,存在明显的缺陷,集合弥补了数组的一些缺点,比数组更灵活更实用,可大大提高软件的开发效率,而且不同的集合框架类可适用不同场合。具体如下:

1:数组能存放基本数据类型和对象,而集合类中只能存放对象。

2:数组容易固定无法动态改变,集合类容量动态改变。

3:数组无法判断其中实际存有多少元素,length只告诉了数组的容量,而集合的size()可以确切知道元素的个数

4:集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式

5:集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率。

 

CollectionCollections的区别

CollectionJava提供的集合接口,存储一组不唯 一,无序的对象。它有两个子接口ListSet

 

Java还有一个Collections类,专门用来操作集合类,它提供了一系列的静态方法实现对各种集合的搜索、排序、线程安全化等操作。

 

ArrayListLinkedList的联系和区别

 

ArrayList实现了长度可变的数组,在内存中分配连续空间。遍历元素和随机访问元素效率比较高。

 

 

 

LinkedList采用链表存储方式。插入、删除元素效率比较高

 

VectorArrayList的联系和区别

实现原理相同,功能相同,都是长度可变的数组结构,很多时候可以互用

两者的主要区别如下

Vector是早期的JDK接口,ArrayList是替代Vector的新接口

Vector线程安全,ArrayList重速度轻安全,线程非安全

长度需要增长时,Vector默认增长一倍,ArrayList增长50% (1.5+1)

 

HashMapHashtable的联系和区别

实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用

两者的主要区别如下

Hashtable是早期的JDK提供的接口,HashMap是新版的JDK提供的接口

Hashtable继承Dictionary类,HashMap实现Map接口

Hashtable是线程安全,HashMap线程非安全

Hashtable不允许null值,HashMap允许null

 

JDK1.5的新特性有哪些?

泛型

Foreach

自动拆/装箱

枚举

可变参数

静态导入

 

 

原创粉丝点击