大家好,今天小编关注到一个比较有意思的话题,就是关于java语言arraylist的问题,于是小编就整理了2个相关介绍Java语言arraylist的解答,让我们一起看看吧。
JAVA集合类库的顶层里的Collection,List,Set是抽象类的话是否更“正确”一些?
不正确,j***a是单继承的,如果顶层是抽象类,对于后面的代码扩展很不利的。而j***a的接口是多实现的,j***a官方对于Collection和set、List设计的也都是接口来设计,符合了j***a的接口多少实现的特性。如果都是设计成抽象类,后面我们在实际开发中,自己的类就没法实现了。具体它们的结构如下:
Collection 接口的接口 对象的***(单列***)
│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
│—————-└ Vector 接口实现类 数组, 同步, 线程安全
│ ———————-└ Stack 是Vector类的实现类
└——-Set 接口: 仅接收一次,不可重复,并做内部排序
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
好奇J***A开发LinkedList插入数据真的比ArrayList快吗?
链表插入数据就是将节点加入到尾部,算法时间复杂度是O(1),相当于插入数据的时间开销是一个常量。
ArrayList是基于数组的实现,插入数据时要看数组的容量够不够,容量足够的话和链表插入性能差不多,但如果不够就需要扩容,扩容就相当于建立一个新数组,把原来的数据复制过去,这个开销就比较大了,
所以在使用ArrayList时,如果指定了一个合适的Capacity,在使用时可以不扩容或者减少扩容次数,就可以提高程序的性能。
Arraylist是数组实现的
1 除了插入尾部,都要把后边的数据往后边挪动。
2 扩容的时候还要全部拷贝到新数组中
Linkedlist是链表,无上边两个缺点,
不过查找的时候要从头next到去找,也可以从尾部向前找,总之查询没这么快。
到此,以上就是小编对于j***a语言arraylist的问题就介绍到这了,希望介绍关于j***a语言arraylist的2点解答对大家有用。