java 集合
什么是集合
1、存放在java.util中,用来存放对象的容器。
2、集合只能存放对象,本身存放的是对象的引用,对象本身还存放在堆内存中。
3、集合是可以存放不同类型、不限数量的数据类型
集合框架图(常用的集合)
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),然后分别上锁。