Java集合的面试题

1 请讲一下Java里面的容器

分两大类,Map和Collection。而Collection又有子接口List(数据存储顺序和插入顺序是一样的)、Set(里面的元素具有唯一性)
Map是存储键值对的,里面的健不可以重复,但值可以重复

2 Arraylist和LinkedList的区别

. 对于List主要有ArrayList和LinkedList两种实现。实现的数据结构不同,所以主要的区别也都是和数据结构相关的

  • ArrayList基于数组,随机访问快,而对于中间元素的插入删除效率比较低,而且需要考虑扩容问题.

  • LinkedList,则 基于链表,和ArrayList提到的正相反,随机访问慢,但对于中间元素的插入和删除更有效率。(不适合查询)

Set也是一种Collection,和List比起来主要体现在元素唯一性。

3 Connection接口的Remove()方法和Iteractor()接口的Remove()方法的区别

集合的remove(带参);
iterator()无参 ,必须配合next()方法使用

从两方面比较

  1. 性能方面:Connection的remove的方法必须一个一个的查找需要被删除的项,(因为单链表结构),查询效率低
    Iterator的remove()方法结合next()方法使用,他会每隔一项删除一项,所以效率更高

2.容错方面:如果使用Iterator遍历时,使用Connection的remove()方法会报ConcurrentModificationException异常,而Iterator遍历时,则不会报错

如以下代码块


	@Test
	public void contextLoads() {

		List list=new ArrayList();
		for (int i = 0; i < 10; i++) {
			list.add(i);

		}

		Iterator iterator = list.iterator();
		while(iterator.hasNext()){
			Object next = iterator.next();
			//list.remove(next);会报错
		iterator.remove();

		}
	}

Array和ArrayList的区别

  • Array是Java中的数组,声明数组存在三种方式
int[] a=new int[10];
		int a1[]=new int[10];
		int a2[]={1,2,3,4};

		//格式1:
		int [] arr = new int[5];
		//格式2:
		int [] arr1 = new int[]{1,3,5,7};
	//	格式3:
		int[]arr2 = {1,3,5,7};


  • ArrayList是一个集合,也是一个动态数组,他可以动态的添加和删除元素,他的长度是可变的,可以添加不同类型的元素

从三个方面来回答面试官:

  1. arrayList比array复杂
  2. 存储的数据类型:array只单纯的存储一种数据类型,而ArrayList可以存储不同的数据类型
    3 array的长度固定,不可变,arrayList长度可变

数组集合之间的转换

//数组转list    Arrays.asList方法
		String[] str={"penghui","xiaokeai","小胖子"};
		//使用asList方法
		List<String> strings = Arrays.asList(str);
		System.out.println(strings.get(0));//输出测试
		//但是需要注意的是,当数组转成集合后,集合不能做添加(add)和删除remove()操作,否则会报错
		//解决办法
		ArrayList<String> strings1 = new ArrayList<>(strings);//现在可以执行添加和删除操作了
		strings1.remove(0);

//list转数组    	lsit.toArray()
		List<String> list=new ArrayList<>();
		String[] strings2 = list.toArray(new String[list.size()]);
		System.out.println(strings2);//测试

5 hashSet,TreeSet,linkedSet的区别

hashSet速度快
TreeSet内部自动排序,如以下代码

TreeSet treeSet=new TreeSet();
		treeSet.add(23);
		treeSet.add(1);
		treeSet.add(54);
		treeSet.add(66);
	for (Object o:treeSet){
		System.out.println(o);//输出的结果为  1 23  54  66 
	}

linkedList是插入的顺序集合,就使用linkedList

HashMap.TreeMap,linkedHashMap的区别

  1. 如果是对Map的插入,删除和定位元素,hashMap可能更好(key/value可以为null)
  2. 有排序的话,用TreeMap较好
  3. 如果是需要按顺序插入的存储集合,用LinkedHashMap更好

HashSet和HashMap的区别

HashMapHashSet
实现了Map接口实现了Set接口
HashMap储存键值对HashSet仅仅存储对象
使用put()方法添加使用add()方法添加
HashMap中使用键对象来计算hashcode值HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false

HashMap比较快,因为是使用唯一的键来获取对象 HashSet较HashMap来说比较慢

.Collections和Collection有什么区别

Collections是一个工具类,可以直接调用List和Set的方法
Collection是一个接口,是List和Set集合的父接口

写出Collections的6个方法,并详细解释

sort():对集合进行排序
shuffle():打乱集合中的元素顺序
addAll():将一个集合添加到另一个集合中
max():判断集合中的最大值
min():判断集合中的最小值
copy():将一个集合中的元素复制到另一个集合中去
fill():将一个集合中的元素全部替换成指定的元素

在这里插入图片描述

Conection的父接口是Iterable接口

Iterable接口可以拥有增强for循环,(foreach)
他的方法有
hashNext () :是否存在下一项
next();获取下一项
remove() 删除需要配合next()方法使用

Connection接口下面存在List Set 和Queue接口

list 特点:有序 可重复
list下面存在ArrayList和LinkedList
ArrayList 查询快 基于数组
LinkedList:增删改快,基于链表

Set的特点:无序 不可重复
HashSet :速度快,无序,只能存在一个null
TreeSet : 可以按升序保存对象
LinkedList: 按添加的顺序保存对象

	Queue  队列   先进先出   (比如排队)
	还有一个堆栈  先进后出		(比如堆沙子)		
	由Queue衍生出	Message  和looper(循环)	和handler
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值