/** LinkedList:双向链表,有头有尾,没有索引,但是我们有模拟出来的也能用
* 适合做各种新增和删除,高频率
*
* ArrayList(线程异步,不安全,效率高):适合做高频率的查找,遍历
* vector(线程同步,安全,效率低,底层代码加了synchronized,基本淘汰):其他和ArrayList几乎一模一样
*
* Collection接口:
* List:有顺序,元素可以重复,顺序指的是添加的先后顺序
* Set:没顺序(实际上是没有规范的顺序,无序不等于随机,底层有做排序),元素不可以重复(想重复必须重写hashCode方法),顺序指的是添加的先后顺序
* set只有删除和新增,二叉树
*
* HashSet:遍历可以用迭代器或增强for循环
*
* TreeSet:排序规则是排序的对象的类必须实现Comparable接口(前提),添加数据,在打印输出时从小到大排序(中间会用compareTo比较大小),引用数据类型按ASC码
* LinkedHashset(链表):有序,添加数据的同时会维护数据的添加顺序(先后),效率比HashSet(链表+二叉树)略低
*
* 比较接口:
* Comparable(只有一个方法,compareTo()):自然排序,排序顺序是固定
* Comparator:临时排序
*
* list.sort():排序
*
* Map(最常用的集合)接口:
* 存储对值,K-V
* key不能重复,value是可以重复的
* 根据key值取value
*
*
* Hashtable(唯一没有满足大驼峰式命名的)和HashMap几乎没有区别:
* 1.HashMap是线程异步,线程不安全的,Hashtable是线程同步,线程安全
* (Hashtable的子类有properties(属性),用来操作属性文件,用法单一)
* 2.HashMap的key是可以为null的,Hashtable的key是不可以为null(空指针)
*
* LinkHashMap:双向链表
*
* Map的遍历:
* 增强for循环
* Entry是hashmap的一个内部类
* 每一组键值对就是一个Entry对象 如map.("1001","小法")
* map.entrySet()+enter(回车)
* HashMap(entry是它的一个内部类)内部存储结构:
* jdk1.7前: 链表+二叉树
* jdk1.7及之后: 链表+数组+红黑树
*
* 迭代器功能最好,不会出问题
*
* 其他集合:
* 1.LinkedHashMap,在HashMap的基础上维护了一个双向链表
* 2.TreeMap:天然支持排序
*
* Collections:一个工具类
*
* 线程安全问题:
* 增强for循环在循环中添加元素或删除时,由于它的底层是迭代器,
* 迭代器依赖于集合存在的,在判断成功之后,集合中新增了元素,
* 迭代器不知道,所以会报错
*
* 解决方案:
* 迭代器遍历元素,迭代器删除元素
学习心得:迭代器功能完整,没有缺陷,Map和List是最重要的,用得最多的两个集合,这两个是今天学习内容的重点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!