java数组和list的区别

列表(ArrayList)是对数组(Array)的一个加强,创建List集合和创建数组的方式如下:

创建List集合:

new ArrayList(100);

创建数组:

new Employee[100];

java数组和list的区别:

一:空间大小

1、Array的空间大小是固定的,空间不够时也不能再次申请,所以需要事前确定合适的空间大小。

2、ArrayList的空间是动态增长的,如果空间不够,它会创建一个空间比原空间大0.5倍的新数组,然后将所有元素复制到新数组中,接着抛弃旧数组。而且,每次添加新的元素的时候都会检查内部数组的空间是否足够。

二:存储内容

1、Array数组可以包含基本类型和对象类型。

2、ArrayList却只能包含对象类型。

需要注意的是:Array数组在存放的时候一定是同种类型的元素。ArrayList就不一定了,因为ArrayList可以存储Object。

三:方法

ArrayList作为Array的增强版,当然是在方法上比Array多样化。比如添加全部addAll()、删除全部removeAll()、返回迭代器iterator()等。

适用场景:

如果想要保存一些在整个程序运行期间都会存在而且不变的数据,我们可以将它们放进一个全局数组里,但是如果我们单纯只是想要以数组的形式保存数据,而不对数据进行增加等操作,只是方便我们进行查找的话,那么,我们就可以选择ArrayList。

而且还有一个地方是必须知道的,就是如果我们需要对元素进行频繁的移动或删除,或者处理的是超大量的数据,那么,使用ArrayList就真的不是一个好的选择,因为它的效率很低,使用数组进行这样的动作就很麻烦,那么,我们可以考虑选择LinkedList。

以上就是java数组和list的区别的个人理解。

0

list集合中去除重复元素三种方法总结

0

java里list转set三种方法总结

方法1:循环遍历转换

方法2:构造方法转换

方法3:Java8流处理转换

这边推荐大家优先使用第三种方法进行java list转set

+3

java初始化list的五种方法总结

经过多年代码总结,归纳了五种java初始化list的方法。

1.构造 List 后使用 List.add 初始化

这是最常规的做法,用起来不太方便。

2.使用 {{}} 双括号语法

这种方式相对方便了一些。

外层的 {} 定义了一个 LinkedList 的匿名内部类。内层的 {} 的定义了一个实例初始化代码块。 这个代码块在初始化内部类时执行。所以这里相当于定义了一个匿名内部类,并使用 add 添加元素来初始化。

这种方式有几个缺点:

使用匿名内部类,会有效率上的损失。当然在大多数情况下,这点效率都是可接受的。

静态内部类持有所在外部类的引用。如果需要将 List 返回给到其他地方使用,可能造成内存泄漏。

3.使用 Arrays.asList

这种方式使用了 java.util.Arrays 的静态方法。写法上比之前的两种都更简洁,也没有构造匿名内部类的效率问题。

但也有几点需要注意:

Arrays.asList 返回的是 Arrays 的静态内部类(静态内部类不持有所在外部类的引用)。

这个内部类继承自 AbstractList,实现了 RandomAccess,内部使用了一个数组来存储元素。但是不支持增删元素。这点需要注意。如果只是使用 Arrays.asList 来初始化常量,那么这点就不算什么问题了。

Arrays.asList 的参数如果是基本类型的数组时,需要留意返回值可能和你预期的不同。

这里 Arrays.asList(intArray) 的返回值是 List 而不是 List。这一点也算不上问题,只是使用时需要留意。如果能在 Java 中做到尽量使用 List 和 Integer,尽量避免使用 int 等基本类型和 [] 这种较为底层的数据结构即可避免。

说点题外话:

Java 终究还是不能称之为完全面向对象。毕竟保留了基本数据类型这种东西。诚然基本数据类型使用时比相应的封装类型效率要更高。但也给使用过程中带来了一些困惑:到底该用基本类型,还是封装类型,什么时候该用这个,什么时候该用哪个?虽然 Java 提供给了用户更多的选择,但有种将难题丢给用户的感觉。在我看来,Java 相比的 C++ 一个优点,就是很多事情有了限制,有较为明确清晰的定义,减少了模棱两可,更容易理解。但基本数据类型这里,感觉还是 Java 作为一门改善了 C++ 缺点的语言留下的一些影子。

虽然本文是在讲初始化 List,但这里的 {{}} 双括号语法同样可用于初始化 Map 等其他众多类型。相对而言,Arrays.asList 就只能用于初始化 List 类型了。

4.使用 Stream (JDK8)

使用了 JDK8 的 Stream 来初始化。 单纯初始化 List,使用 Stream 有点大材小用了。

5.使用 Lists (JDK9)

这个和 Arrays.asList 一样简洁清晰。

总结

java初始化list的五种方法总结到这里就结束了,推荐使用最后两种方法。

0

Java中遍历List集合三种方法总结

一、Java中对List集合的遍历有三种方式

第一种:

这种方式在循环执行过程中会进行数据锁定, 性能稍差, 同时,如果你想在循环过程中去掉某个元素,只能调用it.remove方法, 不能使用list.remove方法, 否则一定出现并发访问的错误。

第二种:

内部调用第一种, 换汤不换药, 因此比Iterator 慢,这种循环方式还有其他限制, 不建议使用它。

第三种:

内部不锁定, 效率最高, 但是当写多线程时要考虑并发操作的问题。

二、测试实例

三、测试结果

(1)、第一次
foreach 遍历时间:55
for list.size()遍历时间:47
iterator 遍历时间:51
(2)、第二次
foreach 遍历时间:54
for list.size()遍历时间:44
iterator 遍历时间:50
(3)、第三次
foreach 遍历时间:48
for list.size()遍历时间:43
iterator 遍历时间:44
从测试的结果我们可以明显的看到效率了!

0