1、ArrayList和LinkedList的区别
2、@Autowired和@Resource的主要区别
1、ArrayList和LinkedList的区别
ArrayList:
底层数据结构:
ArrayList基于数组实现,元素在内存中连续存储,支持随机访问(时间复杂度为o(1));
LinkedList基于双向链表实现,节点离散存储并通过指针关联,不支持随机访问(时间复杂度为O(n));
随机访问:
ArrayList通过索引直接访问元素;
LinkedList需遍历链表,效率较低;
插入、删除:
ArrayList在末尾插入/删除效率较高(时间复杂度O(1)),中间插入/删除需移动后续元素,(时间复杂度O(n));
LinkedList在任意位置插入/删除仅需修改节点指针引用,效率较高(时间复杂度O(1)),但需遍历链表定位节点。
扩容机制:arrayList默认容量不足时自动扩容为原容量的1.5倍,LinkedList无需扩容
- 优先选择ArrayList:当需要频繁随机访问元素或尾部操作较多时(如排行榜、购物车等)。
- 优先选择LinkedList:当需要频繁在中间或首尾插入/删除元素时。
2、@Autowired和@Resource的主要区别
1-- @Autowired是spring框架,@Resource是Java标准注解;
2-- @Autowired优先于按照类型(bytype)匹配,然后名称匹配(byname),冲突时需显式指定@qualifier;
@Resource优先于按照名称(byname)进行匹配,然后按照类型(bytype)进行匹配;
3-- @Autowired支持构造方法注入、属性注入、setter方法注入、方法参数注入
@Resource仅支持属性方法与setter方法注入,使用构造方法注入会报错。