面向对象、集合、异常、String、StringBuffer复习
面向对象
概念
将现实生活中的事物,封装成对象,通过对对象的调用完成需求。
举个很形象的例子,面向过程开发:自己买菜,洗菜,炒菜,切菜,炒菜做饭。面向对象开发:买菜,把菜扔给厨师,厨师就给你做好了。
封装
隐藏类的内部细节,提供外部访问的接口,封装关键字有private,get,set。
优点:提高了代码的重用性。
继承
子类继承父类,子类可以继承父类的公有的属性和方法,但是构造方法不能继承,子类中的super不是继承,而是调用。
优点:减少代码的冗余,实现类的重用
多态
一种类型多种形态,对象在创建时是父类形态,在使用时是子类形态,多态在程序设计中为程序提供了可插拔性。
Set集合
HashSet
HashSet 内部是一个散列表,存储的元素不可重复,是无序集合,内部实现的是HashMap接口。
HashSet存储对象时需要注意对象内部属性的是否重复,如果内部属性值重复,需要重写equals方法和重新自定义哈希码值,保证HashSet内部元素的不可重复性。
LinkedHashSet
LinkedHashSet 内部是链表结构,有链表顺序,环环相扣,不可重复。
TreeSet
TreeSet集合是有序的,可自定义排序方式,内部存储元素不可重复。
自定义排序方式的操作有两种,一种是直接在对象类中实现java.lang.Comparable接口,然后实现其compareTo方法,在新建TreeSet结合的时候系统会自动读取到排序方式。
第二种:定义一个新的排序类,然后实现java.util.Comparator接口,并实现compare()方法,新建TreeSet时传入到TreeSet集合中,集合便会自动排序。
List集合
ArrayList
List集合可形象的称之为可伸缩数组,内部存储元素可重复,是有序的,并且有下标。
ArrayList 遍历速度快。
LinkedList
LinkedList 有链表顺序的集合,内部存储元素可重复。
LinkedList 遍历速度慢,但是插入删除性能优越
LinkedList 和 ArrayList 比对:
ArrayList 存储元素是使用数组方式存储数据,它和LinkedList都允许使用下标直接访问数组内部元素,但是ArrayLIst插入元素牵涉到了内部元素的移动等操作,所以它索引数据快,但是插入数据慢,而LinkedList是双向列表,插入时只需要几句本项的前后项即可,所以它的元素插入速度快。
Vector
线程安全的集合。
Map集合
HashMap
包含键值对映射的集合。
Map集合中键值不可重复,并且是无序的,但是value值可以重复,
LinkedHashMap
LinkedHashMap继承自HashMap,所以他们有很多的相似之处,LinkedHashMap存储数据是有序的,而且分为两种:插入顺序和访问顺序,默认为插入顺序,按照插入元素的顺序来排序,但是调用了设置accessOrder构造方法修改后,可将顺序改为访问顺序。
LinkedHashMap为双向链表。
TreeMap
TreeMap最重要的特点就i是可排序。TreeMap可以按照默认的顺序排序,也可以通过自己定义排序方式:一种是对象类去实现java.lang.Comparable接口,并实现其compareTo()方法。另一种方式是写一个类(如MyCompatator)去实现java.util.Comparator接口,并实现compare()方法,然后将MyCompatator类实例对象作为TreeMap的构造方法参数进行传参(当然也可以使用匿名内部类)。
String和StringBuffer
String
String 的字符序列不变,线程安全,运行效率较低,每次对字符串的操作都会在内存缓冲区内部新建出新的字符串,当处理大量字符串时导致运行速度慢,所以建议使用与操作量小的情况。
StringBuffer
StringBuffer的字符序列是可变的,运行速度较快,线程安全,适用于单线程用户操作。