美文网首页javaJava类
浅谈Java数组与集合

浅谈Java数组与集合

作者: HachiLin | 来源:发表于2020-10-09 14:36 被阅读0次

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)底层结构是二叉树。

参考文献

  1. 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
  2. https://www.cnblogs.com/wslook/p/9385502.html
  3. https://blog.csdn.net/wdsdads/article/details/80789096?utm_medium=distribute.pc_relevant.none-task-blog-title-1&spm=1001.2101.3001.4242
  4. https://www.cnblogs.com/xiaoqv/archive/2011/11/24/2262142.html
  5. https://www.jianshu.com/p/6ec71dc930a6

相关文章

  • 浅谈Java数组与集合

    1. 数组与集合的区别 (1)数组声明了它容纳的元素的类型,而集合不声明。(2)数组是静态的,一个数组实例具有固定...

  • 浅谈Java中的Set、List、Map的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的...

  • JavaSE集合类

    JavaSE集合类 概述 Java中集合类概述Java中数组与集合的比较Java中集合框架层次结构 Collect...

  • Java的集合与数组的基本区别

    Java的集合与数组的基本区别 (一)数组 数组 用于存储基本数据类型,数组的长度固定。 (二)集合 集合类存放的...

  • 2020-04-22 java 中的集合Collection

    Collection 集合与数组存储数据概述:集合、数组都是对多个数据进行存储操作的结构,简称Java容器。说明:...

  • java Collection集合

    1.集合概述 集合:集合是java中的一种容器,可用来存储多个数据。 集合与数组的对比 数组集合长度固定长度可变存...

  • Java集合类

    在java.util包中有一些集合类,称为“容器”。 0.区别:集合与数组 集合:长度可变,用来存放对象的引用数组...

  • Java 集合

    Java集合分4种体系:Set List Queue Map集合与数组的区别:集合可以保存数量不定的数据;集合可以...

  • 集合框架

    集合框架的概念 集合:存放数据的容器 集合框架:java中,用于表示集合,以及操作集合的类和接口的统称 数组与集合...

  • 从Android到Java(二)

    Java基础知识填坑继续。 Java 集合与泛型 数组 VS ArrayList 数组大概是我们学习任何语言时接触...

网友评论

    本文标题:浅谈Java数组与集合

    本文链接:https://www.haomeiwen.com/subject/kupkuktx.html