每日一讲:Java 中有几种类型的流等
1. Java 中有几种类型的流
流是什么? 答:一组有序的数据序列称为流
计算机中的文件有最小组成单元,如字节,字符
在java传输文件中需要将源文件拆分成小的组成单元,经过java程序再将源文件传输到目标文件而传输的过程就是这些最小单元的流动,流动的最小单元就构成了流。
那么流的类型有哪几种呢
Io流
按数据流的流向分为输入流和输出流
按处理数据单元分为字节流和字符流
2如何实现对象的深度克隆
什么是基本数据类型和引用数据类型
基本数据类型:数据直接存储到栈中(byte,short,char,int,long,float,double,boolean)
引用数据类型:存储在栈中的是对象的引用,对象的数据存在堆中(类,接口,数组)
浅克隆对于引用类型只复制了对象的引用地址,新旧对象指向同一个内存地址,修改其中一个对象,另一个对象的值随之改变
深度克隆对引用数据类型是开辟新的内存空间,在新的内存空间里复制一个同样的对象,新老对象不会共享同一内存,修改其中一个对象的值不会影响另一个对象
代码演示:
class Person implements Cloneable { String name; String[] eat; public Person(String name,String[] eat) { this.name = name; this.eat = eat; } @Override protected Object clone() { Person person = null; try { person = (Person) super.clone(); person.eat = eat.clone();//深度克隆 return person; } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", eat=" + Arrays.toString(eat) + '}'; } } public class Test1 { public static void main(String[] args) { String[] eat= { "西瓜", "菠萝" }; Person person = new Person("张三",eat); Person person1 = (Person) person.clone(); person1.name = "李四"; person1.eat[0]="黄桃"; System.out.println(person); System.out.println(person1); //深度克隆 // Person{name='张三', eat=[西瓜, 菠萝]} //Person{name='李四', eat=[黄桃, 菠萝]} //浅度克隆 // Person{name='张三', eat=[黄桃, 菠萝]} //Person{name='李四', eat=[黄桃, 菠萝]} } }
3.List 的三个子类(ArrayList,LinkedList,Vector)的特点
ArrayList底层是用数组实现的存储。 特点是:数组的访问效率高,但是增删效率低,并且线程不安全。
LinkedList底层用双向链表实现的存储。特点:查询效率低,但是增删效率高,线程不安全。
Vector也叫“向量”,底层实现跟ArrayList类似,但是其主要方法加了同步检测,所以它是线程安全的,但是也导致其性能不如ArrayList。