Java基础之List集合原理(一)

19 篇文章 1 订阅
9 篇文章 0 订阅

1.我们都知道,Java基础里面有一块知识非常重要,在我们的开发中也是经常使用,这块知识就是集合,那么我们回顾一下集合的层级结构

从图中我们看到了集合的顶层是Collection<E>接口,可以理解为这是集合中的祖师爷,它最大了,然后可以看到下面有不是很多的实现类或者接口,其中你可以看到我们平时最常用的List<E>接口和Set<E>接口,这是我们开发中最常见的.今天这篇博客,小金子就重点给你们讲讲List<E>集合的原理,让你深入理解List<E>集合接口,好了,话不多说,开始~~~



这里我定义了一个List接口,里面存放字符串,因为List是一个接口,不能直接创建对象,所以这里new一个比较常见的实现类ArrayList,然后往集合中添加了三个字符串,这里相信大家都是看得懂的


这里我添加了一句删除的代码,可以看到字符串"a"成功被删除,那么为什么List集合它就知道,集合中的第一个元素就是字符串"a"呢?那么接下去看


这里我们自己定义一个类User,里面就两个属性id和name,生成构造方法和set和get方法,toString方法,重写一个equals方法,然后在里面添加一个打印代码


然后我们的List集合中需要存放我们的User对象


这里我们把字符串变成了我们自定一的User,然后添加三个User,然后打印了集合,可以看到集合中有三个元素,然后我们还是删除一个


那么请大家思考,这里打印出来的结果是什么,也就是说集合中还剩几个,如果基础好一点的同学一下子就可以知道,集合中还是三个,因为我们添加进去的三个User和我们删除的User都是通过new关键字创建出来的,根本不是同一个对象,所以这里是不能达到删除的目的的!


所以我们针对这个问题先进行变形

代码变形成了这样子,请问打印出来的集合里面有几个元素?

因为我们删除的对象是u1和添加进去的u1是指向同一个对象,所以这里应该是正常删除啦


这里可以看到成功删除u1对象,但是看上面有一句打印,这句话不是在我们的User对象中的equals方法中打印的嘛?这是因为List集合删除一个对象,就是靠equals方法进行判断两个对象是不是一样,不好理解?

比如集合中有十个元素,当别人要集合删除一个对象"小明"的时候,集合是通过便利集合中的每一个对象,也就是从第一个元素便利到最后一个元素.

集合:小明你看看第1个元素是不是和你一样

小明:不一样

集合:小明你看看第2个元素是不是和你一样

小明:不一样

集合:小明你看看第3个元素是不是和你一样

小明:不一样

........

集合:小明你看看第4个元素是不是和你一样

小明:不一样


然后集合就告诉你,对不起我这里没有你想要找的元素,假如"小明"说:那个第5个元素和我一样,这时候集合就不要询问下面的元素了,直接告诉你我这里第五个元素是和那个一样的.这就是List寻找一个对象的原理


这是ArrayList里面的查找一个元素的具体实现,可以看到,里面就是for循环,下面的那个for循环我们可以看到它调用了参数o的equals方法,如果返回true,那就直接返回了,也就是找到了,所以我们这里删除一个对象,也是叫小明自己和每一个对象进行对比,也就是调用equals方法,如果返回true就是一致的,所以这里起到决定性作用的就是User对象中的equals方法,但是我们的方法里面就是调用了父类的equals方法,基础比较好的同学就知道了,父类就是Object对象,并且方法内比较的就是两个对象的地址,也就是使用==运算符


所以我们的测试代码中能在集合中删除u1是因为集合中有一个元素和要删除的u1地址是一样的.

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值