Collection是集合类的上级接口,子接口主要有Set、List、Map
Collections 是针对集合类的一个帮助类,提供了操作集合的工具方法,一系列静态方法实现对各种集合的搜索,排序线性,线程安全化等操作。
Collection
Collection是单列集合
List
元素是有序的,可重复的。有序的collection,可以对列表中每个元素的插入位置进行精确的控制。可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。可存放重复元素,元素存取是有序的。
List接口中常用类
Vector:线程安全,但速度慢,已被ArrayList代替。底层数据结构是数组结构。
ArrayList:线程不安全,查询速度快。底层数据结构是数组结构。
LinkedList:线程不安全,增删速度快。底层数据结构是列表结构。
Set
Set接口中常用的类
Set(集)元素无序的,不可重读的,取出元素的方法只有迭代器。不可以存放重复元素,元素存取是无序的。
HashSet:线程不安全,存取速度快。它是依赖元素的hashCode方法和equals 方法。
TreeSet:线程不安全,可以对Set集合中的元素进行排序,排序是通过compareTo或compare方法中的来保证元素的唯一性。元素是以二叉树的形式存放的。
Map
map是一个双列集合
Hashtable:线程安全,速度快。底层是哈希表数据结构。是同步的,不允许null作为键,null作为值
Properties:用于配置文件的定义和操作,使用频率非常高,同时键和值都是字符串,是集合中可以和IO技术相结合的对象
HashMap:线程不安全,速度慢。底层也是哈希表数据结构,是不同步的,允许null作为键,null作为值,替代了HashTable
LinkedHashMap:可以保证HashMap集合有序,存入的顺序和取出的顺序一致
TreeMap:可以用来对Map集合中的键进行排序
Java(OOP)面向对象的三个特征与含义
封装(高内聚低耦合——>解耦)
封装是指将某事物的属性和行为包装到对象中,这个的对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公布给其他对象。在java中能使用private,protected,public三种修饰符或不用(即默认defalut)对外部对象访问该对象的属性和行为进行限制。
java的集成(重用父类的代码)
继承是子对象可以继承父对象的属性和行为,亦即父对象拥有的属性和行为,其子对象也就拥有了这些属性和行为
java中的多态(父类引用指向子类对象)
多态是指父对象中同一个行为能在其多个子对象中有不同的表现
有两种多态的机制:编译时多态,运行时多态。
1、方法的重载:重载是指同一类中有多个同名的方法,但这些方法有着不同的参数,因此在编译时就可以确定到底调用哪个方法,它是一种编译时多态。
2、方法的重写:子类可以覆盖父类的方法,因此同样的方法会在父类中与子类中有着不同的表现形式
Override和Overload的含义与区
重载 Overload方法名相同,参数列表不同(个数、顺序、类型不同)与返回类型无关。
重写 Override覆盖,将父类的方法覆盖。
重写方法重写:方法名相同,访问修饰符只能大于被重写的方法访问修饰符,方法签名个数,顺序个数类型相同。
Override(重写)
- 方法名、参数、返回值相同。
- 子类方法不能缩小父类方法的访问权限。
- 子类方法不能抛出比父类方法更多的异常(但子类方法不可以抛出异常)
- 存在于父类与子类之间
- 方法被定义为final不能被重写
Overload(重载)
- 参数类型、个数、顺序至少有一个不相同。
- 不能重载只有返回值不同的方法名。
- 存在于父类和子类、同类中
重载的规则
1、必须具有不同的参数列表
2、可以有不同的返回类型,只有参数列表不同就可以了
3、可以有不同的访问修饰符
4、可以跑出不同的异常
重写方法的规则
1、参数列表必须为完全与被重写的方法相同,否则不能称其为重写而是重载。
2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public > protected > default > private)
4、重写方法一定不能跑出新的检查异常或者比被重写方法申明放假宽泛的检查型异常
例如:父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常
Interface与abstract类的区别
Interface只有成员常量,只能是方法的声明。
Abstract class可以有成员变量,可以声明普通方法和抽象方法
interface是接口,所有的方法都是抽象方法,成员变量是默认的public static final类型,接口不能实例化自己。
abstract class是抽象类,至少包含一个抽象方法的类叫抽象类,抽象类不能被自身实例化,并用abstact关键字来修饰