1. 数组与集合的区别
(1)数组声明了它容纳的元素的类型,而集合不声明。
(2)数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。
(3)数组的存放的类型只能是一种(基本类型/引用类型),集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。
(4)数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查都是最快的。
2. 数组
2.1 概念
数组是java语言内置的数据类型,属于引用类型,是一个线性的序列,可以快速访问其他的元素。数组在创建的时候容量是不变的,而且在生命周期都不会改变。
2.2 声明与赋值
2.2.1 声明
int arr[]; // 方式一,以int为例
int[] var; // 方式二
2.2.2 赋值
arr = {1,2,3}; // 方式一
arr = new int[]{1,2,3}; // 方式二
arr = new int[3]; // 方式三
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
3. 集合
List、Set、Map是集合体系中最主要的三个接口。 List和Set继承自Collection接口,Map是Java.util包中的另一个接口。
3.1 List、Set、Map
3.1.1 List(有序、可重复、允许存在多个null元素)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。
3.1.2 Set(无序、不能重复、只允许存在一个null元素)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。
3.1.3 Map(键值对、键唯一、值不唯一、只允许存在一个Key为null元素 )
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。
4. 集合中的实现类
4.1 List实现类
4.1.1 ArrayList
(1)ArrayList底层采用数组实现,具有较高的查询速度。
(2)ArrayList允许添加相同元素和null。
(3)ArrayList是线程不安全的。
(4)ArrayList是非同步的。
4.1.2 LinkedList
(1)LinkedList底层采用双向循环链表实现,进行插入和删除操作时具有较高的速度,可以使用LinkedList来实现队列和栈。
(2)LinkedList允许添加相同元素和null。
(3)LinkedList是线程不安全的。
(4)LinkedList是非同步的。
4.1.3 Vector
(1)Vector底层采用数组实现。
(2)Vector允许添加相同元素和null。
(3)Vector是线程安全的。
(4)Vector是同步的。
【注1】线程不安全
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。
【注2】线程同步与异步
同步是指A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求不到,怎么办,A线程只能等待下去。
异步是指A线程要请求某个资源,但是此资源正在被B线程使用中,因为没有同步机制存在,A线程仍然请求的到,A线程无需等待。
同步最最安全,最保险的。而异步不安全,容易导致死锁,这样一个线程死掉就会导致整个进程崩溃,但没有同步机制的存在,性能会有所提升。
更多参考:https://blog.csdn.net/l__my/article/details/89505259
4.2 Map实现类
4.2.1 HashMap和TreeMap
(1)HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
(2)HashMap和TreeMap都是线程不安全的。
(3)HashMap基于哈希表实现的,TreeMap基于红黑树实现的。
(4)HashMap中key和value都允许为null,TreeMap中key不允许为null,而value允许为null。
4.2.2 Hashtable
(1)线程安全。
(2)不允许有null的键和值。
(3)底层是基于哈希表实现的,哈希表是基于数组+链表实现的。
4.3 Set实现类
4.3.1 HashSet
(1)集合中的元素是唯一的,不能保证元素的排列顺序。
(2)集合元素可以是null,但只能放入一个null。
(3)非同步的(线程不安全)。
(4)底层结构是哈希表。
4.3.2 TreeSet
(1)集合中的元素是唯一的,并且元素是自动排序的。
(2)不允许放入null。
(3)非同步(线程不安全)。
(4)底层结构是二叉树。
参考文献
- https://blog.csdn.net/qq_27088383/article/details/50468779?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param
- https://www.cnblogs.com/wslook/p/9385502.html
- https://blog.csdn.net/wdsdads/article/details/80789096?utm_medium=distribute.pc_relevant.none-task-blog-title-1&spm=1001.2101.3001.4242
- https://www.cnblogs.com/xiaoqv/archive/2011/11/24/2262142.html
- https://www.jianshu.com/p/6ec71dc930a6
网友评论