java 集合

什么是集合

1、存放在java.util中,用来存放对象的容器。

2、集合只能存放对象,本身存放的是对象的引用,对象本身还存放在堆内存中。

3、集合是可以存放不同类型、不限数量的数据类型

 

集合框架图(常用的集合)

java 集合java 集合

1、collection集合实现了接口Iterable,而Iterable 封装了Iterator 接口,因此collection可使用Iterator 迭代器对集合进行遍历。

2、Iterator可以在遍历过程中,动态更改集合的内容。

3、迭代器常用的方法:next(返回刚越过的引用)、hasNet(是否有下一个引用)、remove(删除刚越过的引用)。

4、map是一个key-value键值对,key不允许重复,value可以。

5、map严格意义上其实是两个集合的映射关系,这种映射关系可以看成是一条数据(Entry),map是由多个Entry组成的。

6、map本身没有实现迭代器,因此只能用foreach遍历。

List的实现类

List是有序的,可重复的集合;常用方法:add、set 、get。

1、ArrayList,底层是数组的数据结构,查询快,增删改慢,线程不安全,效率高。

2、Vector,底层是数组的数据结构,查询快,增删改慢,线程安全,效率低,基本淘汰。

3、LinkedList,底层是链表的数据结构,查询慢,增删改快,线程不安全,效率高。

Set的实现类

Set是无序的,不可重复的集合;常用方法add

1、HashSet,不能保证元素顺序,不可重复,不是线程安全,值可为NULL;其底层也是一个数组,存在的意义是加快查询速度,通过建立元素位置和元素的对应关系;具体实现是依靠对象的hashCode、equals,每一个存到HashSet的对象都需要实现这两个方法,用来区分重复对象和存放位置。

2、LinkedHashSet,不可重复,但元素是有序的;底层是链表+哈希表的算法。链表保证了元素有序,hash表保证唯一性。

3、TreeSet,有序,不可重复,底层采用红黑树实现,擅长于范围查找;

4、三种实现都不是线程安全,若要实现线程安全,使用Set set = Collections.synchronizedSet(set 对象)。

Map的实现类

一个键值对映射关系;常用方法:put、get、values(获取值集合)、keySet(获取键集合)、entrySet(获取键值对集合)

1、HashMap,采用哈希算法,不会保证添加顺序,key也不可重复;可存入一个NULL的key,多个NULL的value;不是线程安全。

2、HashTable,线程安全,整体效率低,不推荐;不允许放入NULL的key和value。

3、Set集合是由Map集合的key组成的。

 

并发集合

java多线程编程中使用,可大幅度提高性能,并且是线程安全。

ConcurrentHashMap,是由Segment数组结构和HashEntry数组结构组成;把整个map划分成多个部分(segment),然后分别上锁。

 

java 集合