风也温柔

计算机科学知识库

java数组颠倒顺序 java 容器都有哪些?

  容器可以说是Java Core中比较重要的一部分了。

  数组,,java.util下的集合容器

  ==============================================================================

  数组长度限制为 ..;

  的长度限制: 底层是char 数组 长度 . 线程安全的

  java.util下的集合容器

  这一块之所以重要是因为,各个接口的特性不同。下面说一下我对这些类的理解。

  Set下各种实现类对比

  基于哈希表实现java数组颠倒顺序,有以下特点:

  1.不允许重复

  2.允许值为null,但是只能有一个

  3.无序的。

  4.没有索引,所以不包含索引操作的方法

  跟一样都是基于哈希表实现。只不过在的基础上多了一个链表java数组颠倒顺序,这个链表就是用来维护容器中每个元素的顺序的。有以下特点:

  1.不允许重复

  2.允许值为null,但是只能有一个

  3.有序的。

  4.没有索引,所以不包含索引操作的方法

  是接口的唯一实现类,是基于二叉树实现的。可以确保集合元素处于排序状态。支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向中加入的应该是同一个类的对象。有以下特点:

  1.不允许重复

  2.不允许null值

  3.没有索引,所以不包含索引操作的方法

  List下各种实现类对比。(这几个类都是有序的,允许重复的)

  是基于数组实现的,其特点是查询快,增删慢。

  查询快是因为数组的空间是连续的,查询时只要通过首地址和下标很快就能找到元素。

  增删慢是因为数组是不能扩容的,一旦增加或者删除元素,内部操作就是新开辟一个数组把元素copy到新的数组,老的数 组等待被垃圾回收。

  以元素增加为例,我们看一下内部实现的源码:

  是基于链表实现的。相比于其特点是查询慢,增删快。

  查询慢:因为链表在内存中开辟的空间不一定是连续的(基本上不可能是连续的)所以链表实现的方式是每个元素节点都会存放自己的地址,数据以及下一个节点的地址,这样把所有的元素连接起来。所以当要查询元素时只能一个一个的往下找,相比于数组的首地址加下标会慢上不少。

  下面是链表的数据存储方式:假设有三个元素

  也是基于数组实现的java数组颠倒顺序 java 容器都有哪些?,相比于它是线程安全的。如果不考虑线程安全它,性能更优。

  Map是双列集合的超类。也就是键值对形式。

  和都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(),以及速度。

  和的区别在于多维护了一个链表,用来存储每一个元素的顺序,就跟和差不多。

  通常比快一点(树和哈希表的数据结构使然),建议多使用,在需要排序的Map时候才用。

  如果文章对你有所帮助的话,能够给我个五星票吗~拜谢

  相关面试题可以查看 面试题系列

  文章来源:https://blog.csdn.net/qq_35771266/article/details/97156939