Java面试题系列——JavaSE面试题(集合三)

1、写个时间复杂度为O(n)的算法,找到一个数列第二大的数

public int test(List list) {

        int max=list[0];
        int second=list[1];
   
     if (secv>maxv){
        Collections.swap(list,0,1);
    }


	for(int i = 0 ; i < list.length; i++) {
		if (num[i]>maxv)
        {
            second=maxv;
            max=num[i];
        }
    //num[i]<max这条判断不可少,否则最大元素重复时返回出错;
        else if (num[i]<max&&num[i]>second)
        {
            second=num[i];
        }
 
	}

    return second;
}

2、如何使用jdk1.8新特性从商品集合中单独把某一个字段(比如id)拿出来当做一个集合?

List <Integer> Ids = list.stream().map(User::getId).distinct().collect(Collectors.toList());

3、ArrayList和LinkedList的区别?

1、ArrayList的实现是基于数组,LinkedList的实现是基于双向链表。
2、ArrayList进行增删改操作的效率比较高,LinkedList进行查询操作的效率比较高
3、LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。

4、遍历Set和List的通用方法?

List<String> list = new ArrayList<String>();
Set<String> set = new HashSet<String>();


//1、使用for循环遍历
for (int i = 0; i < list.size(); i++) {
	System.out.println(list.get(i));
}

for(String str1:set) {
			System.out.println(str1);
}

//2、使用foreach遍历
for (String str : list) {
			System.out.println(str);
}

for(String str1:set) {
			System.out.println(str1);
}



//3、使用迭代器遍历
Iterator<String> it = list.iterator();
		while (it.hasNext()) {
			String string = it.next();
			System.out.println(string);
}


Iterator<String> it = set.iterator();
		while(it.hasNext()) {
			//定义一个字符串接收遍历的集合内容
			String str2=it.next();
			System.out.println(str2);
}


//4、使用lambda表达式遍历
list.forEach(n -> System.out.println(n));
set.forEach(n->System.out.println(n));

5、有几种方法可以遍历JAVA集合?

有四种主要的方法:1、使用for循环遍历。2、使用foreach遍历。3、使用迭代器遍历。4、使用lambda表达式遍历。

6、ArrayList哪些操作效率较高?

ArrayList在进行删除,增加,更新操作时的效率比较高。

持续更新中,敬请期待!

参考文章:

java1.8从list集合中抽取某个字段转为新的集合以及把list集合按某个字段进行分组 - uzxin - 博客园

JDK1.8 在对象List集合中取某属性值,并组成一个集合List_Java程序源的博客-CSDN博客

ArrayList与LinkedList的区别_smile&$的博客-CSDN博客_arraylist和linkedlist都是有序的吗

四种遍历List与Set集合的方法,你都知道吗?_qq2663020556的博客-CSDN博客_list和set遍历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小海海不怕困难

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值