集合:储存元素的容器。
集合与数组与区别:
①长度区别:数组长度固定,集合长度不固定;
②内容区别:数组存储的是同一类型的元素(Object类型的除外,因为Object类型的数组也可以存储任意类型的数据),集合可存储不同类型的元素;
③元素数据类型问题:数组可以存储基本数据类型,引用类型,集合只能存储引用数据类型。
集合的体系基类是 (根接口) Collection,它的子接口有 List , Set (着重讲的这两个子接口)。其中List与Set的区别是:List实现的集合是有序的,可重复的,而Set恰好相反,Set实现的集合是无序的、不可重复的。
Collection的功能:主要讲以下几个方法
boolean add (Object obj):添加一个元素
boolean addAll (Collection C):添加一个集合的元素
void clean():移除所有元素
boolean contains(Object O):判断集合中是否包含指定元素
boolean containsAll(Collection C):判断集合中是否包含指定集合元素(所有的元素)
boolean isEmpty():判断集合是否为空
Iterator <E> iterator():迭代器(相当于数组的遍历)
boolean remove (Object O):移除一个元素
boolean removeAll (Collection C):移除一个集合的元素
boolean retainAll(Collection C ):交集
int size( ):元素的个数(相当于数组的长度)
Object [ ]toArray( ) :把集合转为数组
----------------------------------------------------------------------
List的特有功能:
List的实现类有:ArrayList 、LinkedList 、Vector
subList(int formIndex , int toindex):截取(formIndex表示开始截取的位置包含,toIndex表示截取截止不包含 )
void add( intIndex ,Object element ):在指定位置添加元素
(注意的是,如果添加的索引值紧跟集合里的最后一个元素的索引值,则添加没错,大于索引值则会报错-- 索引越界)
Object get( int index) : 获取指定位置元素
Object remove ( int index ):删除指定元素
Object set( int index , Object element ):根据索引修改元素,返回被修改的元素
Set
Set的实现类:treeSet HashSet
treeSet : 如果元素具有自然顺序,treeSet就会按照自然顺序来进行排序;如果不具备自然顺序,需要自己提供一个排序法则,如果自己不提供,就会出现异常;
告知排序的方式:
①自定义类,实现Comparator接口,通过接口中的方法,来指定比较的方法;
②让元素的类实现接口Comparable ;
③通过Compare方法来找到重复元素(返回值为0),则不存储;
④底层排序是通过红黑树数据结构来实现(左小右大);
⑤如果两种排序方式都存在,那么treeSet采用Comparator提供的排序方法;
⑥字符的比较方法是:比字符,如果字符都相同,那么就比字符串的长度。
Map
Map的实现类有:HashMap 、TreeMap , Map的存储方式是(Key,value)---(键,值)叫做双列集合。
MapHash的存储原理:
①在往HashMap中添加元素的时候,会先调用Key的HashCode方法,来获取到一个哈希值;
②经移位运算,也可以算出这个hsahCode在哈希表中的存储位置;
③如果算出来的位置上有元素,那么久调用这个元素的equals方法进行比较,如果返回ture,代表是相同的 Key;如果算出来的位置上没有元素,则直接添加到哈希表中。
TreeMap:基于二叉树数据结构实现元素的排序我们需要注意:
如果具备自然顺序,就按照自然顺序去排列,如果添加到TreeMap中的元素的Key不具备顺序,那么Key所在的类必须实现Comparable接口,把比较的规则定义在 int ComparaTo(Object obj)这个接口的方法中。
泛型
泛型指的是程序员规定使用的类型。
使用泛型的好处:①将运行时的异常提前到了编译时;②避免了一些无所谓的强制转换。
自定义泛型是一个占位符,在使用的时候我们需要注意的是:
①泛型中不允许使用基本数据类型,基本数据类型实际上是经过了包装后的对象类型;
②名称只要符合标识符规范即可,一般推荐使用大小写。
枚举
①枚举是一个特殊的类;
②枚举值得默认修饰符是public static final
③枚举值得类型是本类类型;
④枚举的方法是private修饰的,枚举类会自内部构造枚举值;
⑤枚举是可以有成员变量的,但只能通过枚举值去访问枚举类型的实例成员变量;
⑥枚举类构造的枚举值对象,默认是无参构造的,但是可以通过有参构造来构造它们,但这个有参构造必须是 private修饰的;
⑦可以有抽象方法,但注意的是美金值必须要实现抽象的方法。