java集合概览
一.集合大纲
1.集合与数组的区别:
①集合的长度是固定的而数组的长度不可变。例如:int[] a = {1,2,3,4};
int[] b = new int[10];以上创建的数组长度已经固定了,除非去重新修改定义出的数组长度或是里面包含的元素,否则是无法再通过其他方法来改变的。而在集合里利用特定的方法来增添或删减集合里的元素可以以此来达到改变长度的效果。
②数组的内容可以是基本类型(int,byte……),也可以是引用类型(封装类…..),集合的内容只能是引用类型。
③数组里的元素只能存同一种类型,而集合可以存不同类型的(但集合一般存储的也是同一类型)。
2.常用集合一览:
①Collection是一个接口型的集合。Set、List集合同样作为接口继承了Collection。List集合使元素按进入先后有序保存,元素可重复,可通过索引获取元素。Set集合存储元素有唯一性,且元素排序特点是无序,没有索引。
Collection常用方法
②LinkedList、ArrayList、Vector为具体类实现了List接口。
List常用方法
· LinkedList
优点 : 底层数据结构是链表,查询慢,增删快。
缺点 : 线程不安全,效率高
· ArrayList
优点 : 底层数据结构是数组,查询快,增删慢。
缺点 : 线程不安全,效率高
· Vector
优点 : 底层数据结构是数组,查询快,增删慢。
缺点 : 线程安全,效率低
Set
· HashSet
底层数据结构是哈希表(无序,唯一) 线程不安全,效率高,可以存储null元素
元素的唯一性依靠是否重写hashCode()和equals()方法来保证的。
· LinkedHashSet
底层数据结构是链表和哈希表(FIFO插入有序,唯一) 线程不安全,效率高。
由链表保证元素有序,且由哈希表保证元素唯一。
· TreeSet
TreeSet底层数据结构采用二叉树来实现,元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性。
根据构造方法不同,分为自然排序(无参构造)和比较器排序(有参构造),
自然排序要求元素必须实现Compareable接口,并重写里面的compareTo()方法,元素通过比较返回的int值来判断排序序列,返回0说明两个对象相同,不需要存储;(TreeSet <T> X=new TreeSet<>(new Comparator<T>()--- public int compare(T t, H h return 0;))
比较器排需要在TreeSet初始化是时候传入一个实现Comparator接口的比较器对象,或者采用匿名内部类的方式new一个Comparator对象,重写里面的compare()方法;(this.name.compareTo(p.name))。
③Map集合没有继承Collection,但也是接口集合,无法直接创建对象。
(Map<Integer,String> map=new HashMap<Integer,String>();)
Map 的内容可以被当作一组 key 集合,一组 value 集合,或者一组 key-value 映射。你可以通过“键”(key)找“值”(value),也可以通过“值”找“键”。Map集合必须保证保证key 唯一,作为key,必须重写hashCode方法和equals方法,以保证key唯一。\
Map常用方法
· HashMap 数据结构:哈希表(数组+单向链表+红黑树),当链表长度超过阈值(8)时,链表将转换为红黑树. 查询快,元素无序,key不允许重复但可以为null,value可以重复。
· LinkedHashMap
数据结构:哈希表(数组+双向链表+红黑树),当链表长度超过阈值(8)时,链表将转换为红黑树。 查询快,元素有序,key不允许重复但可以为null,value可以重复