Java踩坑小记
Iterator
迭代器Iterator在遍历时能remove但是不能往集合里添加元素问题。我们都知道如果是像List集合这样的,如果用循环遍历,访问没问题,在这期间如果删除就会报错,这个问题是因为你改变了集合的长度,但是遍历用的原来的长度的原因,
所以Iterator优秀点就出现了,它的出现让你可以在遍历时删除你想删除的元素,它用while循环遍历,它往下循环也就是while里的判定条件是Iterator.hasNext() 返回的是boolean类型,看这个也明白,它是在你想继续往下遍历时先查询是否存在下一个元素。
而且集合转Iterator也不麻烦,集合本身就有这个方法
1 | |
敲黑板 下面要讲两点重要的还容易忘的误区
如果在遍历时删除元素不要用集合的 remove() 方法,要用迭代器的 iterator.remove() 方法,虽然没有参数,但是它移除的是当前的。 在用迭代器迭代的时候千万不要修改集合和给集合添加元素,这样会报错,因为你迭代时添加元素会破坏迭代器的结构,所以会报错,因为拿ArrayList为例,在遍历到中间的时候,你往集合头部插入元素,集合的结构肯定变吧,那迭代器的数据结构也会跟着变,它就会主动报错,,但是删除就没问题了,因为你用的是迭代器的删除方法,而迭代器没有添加元素的方法
参考链接:https://blog.csdn.net/weixin_43113679/article/details/99775014
HashMap未覆写Hash算法
HashMap以其元素唯一性为开发人员所青睐,然后当元素类型是自定义类型时,需要覆写自定义对象的hashcode和equals方法,否则将无法保证元素唯一。
拆箱和装箱
在Java中,拆箱(Unboxing)和装箱(Boxing)是为了实现基本类型和对应的包装类型之间的自动转换而引入的特性。
装箱是指将基本类型的值转换为对应的包装类型的对象。例如,将一个int类型的值转换为Integer对象。
1 | |
拆箱是指将包装类型的对象转换为对应的基本类型。例如,将一个Integer对象转换为int类型的值。
1 | |
拆箱和装箱的主要目的是为了方便在基本类型和包装类型之间进行转换,使得在需要使用包装类型的地方可以使用基本类型,反之亦然。这样可以简化代码编写过程,提高代码的可读性和易用性。
拆箱和装箱是由Java编译器自动完成的,这意味着在需要进行拆箱或装箱操作的地方,编译器会自动插入相应的代码。但是,由于拆箱和装箱涉及到对象的创建和销毁,因此在性能要求较高的情况下,手动进行拆箱和装箱操作可能更为高效。