JAVA基础-集合

2021-02-09  本文已影响0人  啊啰哈嘿呀

JAVA基础-集合

1.概述

JAVA容器分为两大类:
Collection接口的子接口包括:List接口和Set接口;List接口实现类主要有ArrayList、LienkedList、Vector等;Set接口的主要实现类有HashSet、TreeSet、LinkedHashSet等;
Map接口的实现类主要有HashMap、TreeMap、Hashtable、ConcurrentHashMap等;

2.List和Set的异同

允许重复对象 null元素 是否有序 常见实现类
List 允许多个null元素 ArrayList LinkedList Vector
Set 允许插入一个null元素 HashSet LinkedHashSet TreeSet

两个接口都是继承自Collection,是常用来存放数据项的集合,主要区别如下:

① List和Set之间很重要的一个区别是是否允许重复元素的存在,在List中允许插入重复的元素,而在Set中不允许重复元素存在。

② 与元素先后存放顺序有关,List是有序集合,会保留元素插入时的顺序,Set是无序集合。

③ List可以通过下标来访问,而Set不能。
List和Set可以相互转化:

//List转Set
Set<String> set = new HashSet<>(list);
//Set转List
List<String> list1 = new ArrayList<>(set);

3. List接口常用实现类

ArrayList、Vector和LinkedList类均在java.util包下;ArrayList和Vector都是基于存储元素的Object[] array来实现的,它们会在内存中开辟一块连续的空间来存储,因为数据存储是连续的,所以它们支持用下标来访问元素,索引数据的速度比较快。LinkedList是采用双向列表来实现的,对数据的索引需要从列表头开始遍历,因此用于随机访问则效率比较低,但是插入元素时不需要对数据进行移动,因此插入效率较高。同时,LinkedList是非线程安全的容器。

数据结构 并发安全 扩容机制
ArrayList 数组 非线程安全 自动增长原数组的0.5倍
Vector 数组 线程安全 增长为原数组的1倍
LinkedList 双向链表 非线程安全

4.Set接口常用实现类

HashSet: 无序
LinkedHashSet: 按照插入顺序
TreeSet: 从小到大排序

4.List和Map的区别

5.Map接口常用实现类

允许key/value为空 并发安全 排序
HashMap 允许为空 非线程安全 无序
LinkedHashMap 允许为空 非线程安全 保持插入时顺序
TreeMap 允许为空 非线程安全 根据键排序,默认升序
ConccurrentHashMap 不允许为空 线程安全 无序
Hashtable 不允许为空 线程安全 无序
上一篇 下一篇

猜你喜欢

热点阅读