集合框架的概述:
集合代表了一组对象,java中的集合框架则是定义了一套规范,用来表示操作的集合,使具体操作和实现细节解耦,而这些操作就是增删查改。她由三部分组成,具体包括定义集合的行为的接口,接口的实现类,工具类。接口如:Collection、List、Map,实现类如:ArrayList、LinkedList、HashMap等,工具类如:Collections,Arrays.
集合和数组的区别:
数组长度固定,集合长度可变;数组中只能存储相同的数据类型 ,而集合中则可以存储不同的数据类型。
java集合框架图:
转载自:https://yq.aliyun.com/articles/255516
集合框架中的几个关键接口:
Collection接口:框架的根接口是Collection。Collection和Map定义了集合框架中所有类通用的行为。Collection可以保存任何类型的对象(引用),所以他不能存储基本数据类型 。Collection没有具体的实现类,他只是提供更加具体的子接口实现。由图可知其子接口实现包括 List、Set、Queue.
1. List接口:其中的元素可以重复,以元素的插入顺序放置元素 。实现这个接口的集合中的元素在集合中具有一个位置,这个位置由整型的索引值指定。正如数组那样,这些索引值以0开始,并具有等于列表的大小减1的最大值。
2. Set接口:其中的元素不可以重复,使用自己内部的排列 机制。
3. Queue接口:队列,主要用来存储元素。
Set和List:
转载自:https://yq.aliyun.com/articles/255516
Map接口:
Map存储具有映射关系的键值对,即key-value,key和value可以是任何一种数据类型,其中的key基于Set实现,所以key的值不能重复而且无序。
集合框架中的具体实现类:
ArrayList和LinkedList:ArrayList是基于动态数组的数据结构,LinkedList是基于链表的数据结构。对于随机访问get和set,Arraylist的速度要快于LinkedList,因为LinkedList要移动指针,而ArrayList使用下标直接查找就行。对于批量的增加和删除add和remove,LinkedList的速度要快于ArrayList,因为ArrayList要移动数据。当然对于单条数据,ArrayList的速度大概还是要快于LinkedList。
HashSet和TreeSet:HashSet是基于HashMap实现的,TreeSet是基于TreeMap实现的。通常使用HashSet,当要对其中的元素进行 排序时才用到 TreeSet.他们之间唯一的共同点是就是集合的唯一性 。HashSet提供最快的查询速度,而TreeSet保持元素处于排序状态.
HashMap和TreeMap:HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有都保持着某种固定的顺序。在Map中插入,删除和定位元素,HashMap是最好的选择。要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。使用HashMap要求添加的键类明确定义了hashCode()和equals()的实现。hashcode用来计算hash值,用它来确定hash表索引的,hash表中的一个索引处存储一个链表,所以要通过equals方法循环比较链上的每一个对象才可以真正定位到键值对应的entry。 覆写key的hashCode()和equal()时一定要注意,不要把它们和可变属性关联上,否则属性变了之后hashCode会变,equal也会为false, 这样在Map中就找不不到它了,而且这样的对象因为找不到它所以得不到释放,这样就变成了一个无效引用了(相当于内存泄漏).对于TreeMap,由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.Comparator可以在创建TreeMap时指定,这时排序时使用Comparator.compare。如果创建时没有指定Comparator,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口。
工具类:
两个工具类为Collections和Arrays,分别封装了对集合的操作方法和对数组的操作方法,这些操作方法使得程序员的开发更加高效.
集合框架
最新推荐文章于 2024-07-16 16:50:07 发布