# kglide **Repository Path**: YYgyf/kglide ## Basic Information - **Project Name**: kglide - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-17 - **Last Updated**: 2025-01-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # `WeakHashMap` 键是弱引用,如果键不再有强引用指向它,垃圾回收器可以回收它们。值会在相应键被回收时自动从 WeakHashMap 中移除 # kotlin 构造方法可见性修饰符 * public(默认):构造方法对所有类可见。 * protected:构造方法仅对同一包中的类和该类的子类可见。 * internal:构造方法仅对同一模块中的类可见,模块通常指的是编译单元。 * private:构造方法仅对同一类中的代码可见,无法在类外部或其他类中访问 # `ArrayDeque` - ArrayDeque 实现了 Deque 接口,提供了从队列两端高效地添加或删除元素的操作。 - 它比 LinkedList 更高效,特别是在需要从队列两端访问元素时,因为它避免了链表节点的额外开销 - 它具有常数时间的插入和删除操作(addFirst()、addLast()、removeFirst()、removeLast() - 在处理需要频繁从队列两端操作的场景时,ArrayDeque 比 LinkedList 更加高效 ## 循环数组 - 通过维护头部和尾部指针来避免大规模的移动 - 索引位置计算 (head + index) % elements.length; # `ReentrantLock` - lock() 会阻塞线程,直到它能够获取到锁 - 如果锁没有被其他线程占用,lock() 会立即返回,线程会继续执行 - 如果锁已经被其他线程持有,当前线程会等待,直到锁被释放 - 是可重入的锁,这意味着同一个线程可以多次获得它,而不会发生死锁 - 默认情况下,ReentrantLock 是非公平的,即它不会按照请求锁的顺序来分配锁 ```java class Test { ReentrantLock lock = new ReentrantLock(); void acquireLock() { lock.lock(); // 线程尝试获取锁,并阻塞 try { } finally { lock.unlock(); // 确保在操作完成后释放锁 } } } ``` # `::class` `::class.java` `javaClass` `javaClass.kotlin ` - Any::class.java和any.javaClass都表示java的class - Any::class 和 any.javaClass.kotlin都表示KClass # `\u` 是用来表示Unicode 转义字符 的前缀.它的格式是 \u 后跟四个十六进制数字,表示一个 Unicode 编码对应的字符 # `flatMap` 适合处理需要将嵌套结构(如 List>)展平成单层集合的场景List 它等价于 map + flatten # kotlin `in` `out` 1. out 通配符(协变)表示泛型参数是只读或输出类型。 使用场景:当一个泛型类型只会被当作“生产者”(提供数据)时使用。 适用规则: 泛型类型只能作为返回值,不能作为参数。 常用于只生产数据的场景,例如 List。 相当于java的super ```kotlin class Box(val value: T) { // val value: T 是只读属性 // fun setValue(v: T) { } // 编译错误,不能用 T 作为输入参数 } fun main() { val stringBox: Box = Box("Hello") val anyBox: Box = stringBox // 协变,允许子类型转换为父类型 println(anyBox.value) // 输出:Hello } ``` 2.`in` 通配符表示泛型参数是只写或输入类型 当一个泛型类型只会被当作“消费者”(接收数据)时使用 适用规则: 泛型类型只能作为函数参数,不能作为返回值。 常用于只消费数据的场景,例如 Comparator。 相当于java的extend ```kotlin class Consumer { fun consume(item: T) { println("Consumed $item") } // fun produce(): T { } // 编译错误,不能用 T 作为返回值 } fun main() { val anyConsumer: Consumer = Consumer() val stringConsumer: Consumer = anyConsumer // 逆变,允许父类型转换为子类型 stringConsumer.consume("Hello") } ```