集合和map以及Collections和collection

集合和map

java分为collectionmap两种体系,

collection分为ListSet

List集合元素有序,可以重复,Set集合元素无序,不可以重复。

LIst下又分为ArrayList ,LinikedList,vector,(除了vector)他们都是线程不安全的。

ArrayList是基于动态数组来实现的,所以他的查找效率比较高,但是添加删除效率不高,而且是线程不安全的

LinkedList是基于双向链表来实现的,他的添加删除是相对来说比较高效,但是查找效率不是很高,

Vector:是线程安全的,但是效率不高。

为什么ArrayList的增删效率没有LinkedList效率高?

因为ArrayList在进行增加和删除操作时,需要复制一个新的数组,然后在新的数组上进行操作,而linkedList只需要改变一下节点的指向就行了。ArrayList查询效率比较高的原因,是因为他是基于动态数组的,只需要改变一下偏移量就可以了,而LinkedLsit由于是基于双向链表的,所以在进行查找的时候需要从头到尾遍历每一个节点。

Set集合

无序不重复,下面分为HashSet,TreeSet,LinkedHashSet

HashSet: 是基于Hash表来实现的,元素存储无序,不可以存放重复集合,它的底层是包含了HashMap的一个实例,所以说每次对HashSet的操作本质上也是对HashMap的操作,同时他也是线程不安全的,同时hashSet要求放入的对象必须实现hashCode方 法,因为他是通过hashCode值来存放的,同样的数据hashCode是一样的。

TreeSet:是基于二叉树实现的,是一个有序的无重复元素的,不允许放入null值,是通过TreeMap实现的,里面包含一个TreeMap实例,性能略低于HashSet,但如果我们需要排序功能,则可以使用TreeSet。

LinkedHashSet:底层是由hash表和链表来实现的,维护了插入的顺序,在遍历的时候会根据插入的顺序进行遍历输出,也就是先入先出。 是线程不安全的。性能略低于HashSet。

Map

下面又分为HashMap,LinkedhashMap,hashtable,currenthashmap

hashMap是线程非安全的,效率比较高,可以存储空的键值对,他根据hashCode来取值放值,遍历时候,所取数据随机。

LinkedhashMap:是hashMap的一个子类,他保证了记录插入的顺序,在遍历输出先添加的先输出,当数据比较小的hashmap速度比较快,但当容量很大实际数据却很少的时候,速度可能没有LinkedhashMap快,因为hashmap的查找效率和容量有关,而linkedhashMap的查找效率只与实际数据多少有关。

hashTable:是线程安全的,但是效率比较低

concurrentHashMap:是线程安全的,如果需要线程安全的,可以使用concurrenthashMap,他比hashTable的扩展性要好,但是hashTable提供更好的安全性(不重要)。

TreeMap:实现了sortMap接口,能够把保存的记录进行排序,默认按照键的升序来排序。

插入、删除、定位元素时,使用hashMap比较好,而进行自定义排序或自然排序时可以使用treeMap

要求输入和输出顺序相同,使用LinkedHashMap

Collecttions

是一个集合工具类,可以对集合进行操作,提供了一系列的静态方法,比如Collections.sort(集合)方法,对集合进行排序,对集合进行搜索,不能被实例化,所操作的对象不能为空,如果为空,则会抛出NullPointException。

Collection

collection是一个接口,他提供了对集合对象进行操作的通用接口方法,一般来说实现该接口的类主要是List,Set

猜你喜欢

转载自blog.csdn.net/qq_44794782/article/details/120227782
今日推荐