Java基础知识-集合类

1.Array和ArrayList的区别,什么时候更适合用Array?

1.Array是数组,可以容纳基本类型和对象,而ArrayList是集合,只能容纳对象。
2.Array是指定大小的,而ArrayList的大小是动态的。
3.Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。
4.适合用Array的情况
(1)如果列表的大小已经指定,大部分情况下是存储和遍历它们。
(2)对于遍历基本数据类型,尽管Collections使用自动装箱来减轻编码任务,在指定大小的基本类型的列表上ArrayList的工作也会变得很慢。
(3)如果你需要使用多维数组,使用[][]比List<List<>>更简单/

2.ArrayList和Vector的区别

(1)Vector是线程同步的,所以它也是线程安全的;而ArrayList是线程异步的,是不安全的。如果不考虑线程的安全因数,一般用ArrayList效率比较高。
(2)如果集合中的元素数目大于目前集合数组的长度时,Vector增长率为目前数组长度的100%,而ArrayList增长率为目前数组长度的50%。在数据量变化比较大的情况下,用Vector有一定的优势。

3.ArrayList和LinkedList的区别

(1)ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表的数据结构。
(2)对于随机访问的get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针。
(3)对于新增和删除add和remove,LinkedList比较占优势,因为ArrayList要移动数据。这一点要看情况,如果只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但批量随机插入,则考虑LinkedList。因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。

4.List、Set和Map的区别

(1)List(实现了Collection接口)
1.可以允许有重复的对象
2.可以插入多个null元素
3.是一个有序容器,保持了每个元素的插入顺序
(2)Set(实现了Collection接口)
1.不允许有重复的对象
2.无序的容器,无法保证每个元素的存储顺序,而TreeSet可以通过Comparator或Comparable进行顺序排序。
3.只允许有一个null元素
4.LinkedHashSet按照元素的插入顺序对它们进行存储
(3)Map(不是collection的子接口或实现类。Map是一个接口)
1.Map是以键值对的存储方式存放数据,key是唯一的,value可以重复。
2.Map中可以有多个null值,但只能有一个null键
3.TreeMap也可以通过comparator或者comparable维护排序顺序

5.HashMap和HashTable的区别

1.Hashtable是线程安全的,同步的;而HashMap是线程不安全的不同步的。
2.HashMap允许存在一个null的key,多个null的value;而Hashtable的key和value都允许为null。

6.HashMap和TreeMap的区别

1.HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着固定的顺序,如果你需要得到一个有序的结果,你就应该使用TreeMap(HashMap中的元素排列是无序的)
2.在Map中插入、删除和定位元素,HashMap是最好的元素,但是如果想要按照自然顺序或自定义顺序遍历Map,那么就使用TreeMap。使用HashMap要求作为key的类中明确重写了HashCode()和equals()方法。
(两个Map中的元素一样,但顺序不一样,会导致hashCode()不一样:
测试:
(1)在hashMap中,同样的值的map,顺序不同,equals时为false;
(2)在treeMap中,同样的值的map,顺序不同,equals时为true,说明treeMap在equals()时是整理了顺序。)

7.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?

1.Set里的元素是不能重复的,用equals()方法来区分重复与否。
2.==:(1)判断基本类型时,比较的是值是否相同;(2)引用类型时,比较的是地址是否相同。
3.equals:只能判断引用类型,默认情况下比较的是地址,可以进行重写,比较的是:对象的成员变量值是否相同。

8.Collection和Collections的区别?

1.java.util.Collection是一个接口(集合顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在java类库中有很多集合的实现,其直接继承Collection接口有List和Set
2.Collections则是集合类的一个工具类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索及线程安全等操作。

9.说出ArrayList、LinkedList的存储性能和特性

1.ArrayList采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,优点是索引读取块,从最后插入和删除元素速度快,但是头部插入和删除速度慢。
2.LinkedList使用双向循环链表方式存储数据,所以头尾插入或读取的速度快,而中部插入速度慢。

10.Enumeration和iterator接口的区别

1.Enumeration接口作用与iterator接口相似,但只提供了遍历Vector和HashTable类型集合元素的功能,不支持元素的移除操作
2.Enumeration速度是iterator的2倍,同时占用更少的内存。但是,iterator远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,iterator允许调用者删除底层集合里面的元素。

11.ListIterator有什么特点,与iterator区别

1.Iterator是ListIterator的父类接口
2.Iterator是单列集合(Collection)公共取出容器中元素的方式,而ListIterator是List集合的特有取出元素方式。
3.Iterator中具备的功能只有hashNext(),next(),remove();ListIterator中具备着对被遍历的元素进行增删改查的方法,可以对元素进行逆向遍历。

12.Java中HashMap的key值要是为类对象,则该类需要满足什么条件?

需要重写equals()和hashCode()方法

13.ArrayList集合中加入一万条数据,应该怎么提高效率?

直接初始化ArrayList集合的初始化容量为1万。但达到100万以上乃至1000万以上,初始化容量方法效率会下降。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值