java list 查找_快速记忆:List以及它的小伙伴们

3596ab7d9b02d77d4d4655363261d1cc.png

一直以来,ArrayList和LinkedList的区别ArrayList和Vector的区别List下不同实现类的相关知识点都是Java开发人员在开发过程中必须要掌握的基础知识,也是在面试过程中最常见的问题之一。

在这里,本文会将这些知识点加以整理,提取出最精华,最容易使用到的部分给大家,方便记忆。

List

List是一个继承于Collection的接口,ArrayList,LinkedList,Vector,Stack都只是它的一个实现类。

ArrayList

一个动态数组,由数组实现,所以具有数组的优缺点。方便快速随机访问,不适合频繁的添加或删除元素。

默认数组大小10。

扩容:底层采用线性连续空间存放元素,当空间不够时,会重新申请一片新的空间,大小是原来的1.5倍+1,并把原有的内容复制过去。

线程安全性:非线程安全

序列化:支持序列化,实现了java.io.Serializable接口

应用场景(以下两个条件同时满足)

  1. 需要快速随机访问元素
  2. 单线程场景或者多线程场景但是List只会被单线程操作

LinkedList

一个双向链表,具有链表的一些性质。包括能够快速添加和删除元素,但是不适合频繁访问元素,因为要从头指针开始遍历查找。

查找时,会根据index下标和整个List的长度size的关系,决定是从头查找还是从尾开始。如果index<size/2,则从头查找,否则从另一端开始遍历。

默认初始大小0。

扩容:底层实现是链表,不存在扩容问题。

线程安全性:非线程安全

应用场景:适用于需要快速插入和删除元素的场景

Vector

和ArrayList一样,都是由动态数组实现。方便快速随机访问,不适合频繁的添加或删除元素。

默认数组大小10。

扩容:与指定的增长系数有关,如果增长系数>0,则新的容量增长为原来的容量+增长系数,否则变为原来容量的2倍

线程安全性:线程安全,函数大多数具有关键字synchronized,即都支持同步。

性能较差,因为方法加入了synchronized修饰,当执行的时候,系统会在方法前加一把锁,方法执行结束之后再释放掉。加锁和释放锁的过程会造成一定的系统开销,因此性能上要差许多。

序列化:不支持序列化

应用场景(以下两个条件同时满足)

  1. 需要快速随机访问元素
  2. 多线程场景且List会被多个线程操作

Stack

Stack是栈,继承于Vector。具有先进后出的特点。

对Vector进行扩展,添加了五个方法操作

  1. empty() 检查栈是否为空
  2. peek() 查看栈顶对象
  3. pop() 移除栈顶对象并返回
  4. push(E item) 压入栈顶
  5. search(Object o) 查找对象并返回其位置(下标值)

线程安全性:线程安全,由于继承于Vector,Vector是线程安全,故Stack也是线程安全类。

总结

有关List族群的相关知识点肯定不止以上这些,它的每一个实现类,都具有自己独特的性质,方便开发人员在不同的场景使用。

本文的内容只是帮助大家把这些实现类中比较重要的一些属性整理并记录下来,帮助大家快速记忆。如果大家希望能够了解更多的相关知识,可以自行上网查阅资料,也可以在文章最后留言,小编会在之后的文章中针对大家的需要整理成文,提供给大家~

原文地址:

快速记忆:List及其小伙伴们​darylliu.github.io
5929cf7e0910494908d488a3e86a389b.png

更多精彩,请看签名!

更多精彩,请看签名!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要取得Nacos配置中心中的List类型配置,需要使用Nacos提供的Java SDK,具体步骤如下: 1. 引入Nacos Java SDK的依赖,可以在Maven中添加如下依赖: ```xml <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>${nacos.version}</version> </dependency> ``` 2. 在代码中使用Nacos SDK获取配置,示例代码如下: ```java import com.alibaba.nacos.api.NacosFactory; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.config.listener.Listener; import com.alibaba.nacos.api.exception.NacosException; import java.util.List; import java.util.Properties; import java.util.concurrent.Executor; public class NacosConfigExample { public static void main(String[] args) throws NacosException { String serverAddr = "localhost:8848"; // Nacos服务地址 String dataId = "example"; // 配置ID String group = "DEFAULT_GROUP"; // 配置分组 Properties properties = new Properties(); properties.put("serverAddr", serverAddr); ConfigService configService = NacosFactory.createConfigService(properties); String content = configService.getConfig(dataId, group, 5000); // 获取配置内容,超时时间为5000ms // 将List类型的配置转换为List对象 List<String> list = Arrays.asList(content.split(",")); // 监听配置变化 configService.addListener(dataId, group, new Listener() { @Override public void receiveConfigInfo(String configInfo) { // 配置变化后的处理逻辑 List<String> list = Arrays.asList(configInfo.split(",")); // ... } @Override public Executor getExecutor() { return null; } }); } } ``` 在获取配置之后,可以将List类型的配置内容转换为List对象进行处理。同时,可以使用addListener方法监听配置的变化,当配置发生变化时,会触发Listener中的回调函数,从而进行相应的处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值