Java集合相关问题
# Java集合相关问题
# 集合
# List、Set、Map的区别是什么?
List:List是一个有序的集合,允许重复的元素,可以通过索引来访问和修改元素。常用的实现类有ArrayList、LinkedList
- 允许有重复元素,可以插入多个null元素,保持了每个元素的插入顺序,输出的顺序就是插入的顺序
- 它的
查询速度快
,但是增删速度慢
Set:Set是一个无序的集合,不允许重复的元素,只能通过迭代器来遍历元素。Set在Java中常见的实现类有HashSet、TreeSet。
- 它是
基于哈希表实现
的,集合中不包含重复的元素
,它只允许存储一个null元素 - 并且元素的
顺序是不确定的
,且非线程安全的。 - 它的查询效率不如List,但是增删改效率高于List
Map:Map是一种依照键存储元素
的容器,在Map中键可以是任意类型的对象
。Map中不能有重复的键
,每个键都有一个对应的值。一个键(key)和它对应的值构成map集合中的一个元素。当需要保存和查询数据时,可以选择使用Map。常用实现类有以下两个:HashMap和TreeMap。
map的本质上是一个 数组+链表的结构 JDK8之后,当HashMap中的元素数量达到一定的阈值(例如,数组数量大于8,或者哈希表的大小达到64),它会把链表转化为红黑树以提高性能HashMap变成了 数组+链表+红黑树
# 循环
# for循环中break与continue以及return的区别
- continue:跳过本次循环,不会结束for循环
- break:结束当前循环,结束for循环
- return:结束当前循环,同时还会跳出当前函数
# Java中的迭代器,iterator,为什么有时候遍历的时候会报NoSuchElementException?
当我们用while,for对iterator进行遍历的时候,循环完毕,这时的iterator迭代器,会指向最后的元素,这时我们如果再——iterator.next(),就会报NoSuchElementException,这时我们如果希望再次遍历,需要重置我们的迭代器
ArrayList list = new ArrayList();
list.add(5);
list.add(3);
list.add(2);
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println(it.hasNext());// false 表示没有元素了
//System.out.println(it.next());//会抛出异常 NoSuchElementException
it = list.iterator(); //从集合里重新获得迭代器
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
注意:在调用it.next()方法之前必须要调用it.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常
# Java中Array.sort()方法到底用的什么排序算法?
Arrays.sort并不是单一的排序,而是插入排序,快速排序,归并排序这三种排序的组合
数量非常小的情况下 (少于47的时候),使用插入排序
数量大于或等于47,少于286的时候,使用快速排序
数量大于286的情况,使用归并排序
上次更新: 2025/03/07, 06:05:43