
java
文章平均质量分 85
谢宇寒
这个作者很懒,什么都没留下…
展开
-
如何优雅的删除List中的元素
问题如何删除list中index为偶数的元素?简单分析:首先我们得明确一点,就是不能边for循环,边删除元素,会出现越界的异常。那我们来看看怎么实现。解决方式1:标记整理清除套用了Old区使用的gc算法,就是将需要的元素标记,然后整理到一侧,最后删除无用元素。直接上代码: /** * 去掉数组的index为偶数的元素 * * @param list list * @return List */ private List<Integ原创 2021-04-27 17:35:59 · 703 阅读 · 0 评论 -
多线程下的计数器
概述juc是java的核心包,而juc下面的核心包之一应该就是locks了,而locks下最核心的类就是AbstractQueuedSynchronizer类(简称aqs),它可以说是多线程下所有锁相关类的父类,我们来看看它有多少子类。可以看到有ReentrantLock,ReentrantReadWriteLock,Semaphore,CountDownLatch,ThreadPoolExecutor。ps: CyclicBarrier是采用ReentrantLock实现的。这次我们先学习一下多线程原创 2021-04-27 14:51:53 · 2448 阅读 · 0 评论 -
Object.wait/notify和synchronized的协作
private static final Object LOCK = new Object(); private int i = 0; private static final int MAX_VALUE = 100; public static void main(String[] args) { try { Thread.sleep(5000); } catch (InterruptedException e)...原创 2021-04-26 15:49:38 · 300 阅读 · 0 评论 -
Synchronized的由浅入深
Synchronized的由浅入深一. 使用synchronized可用来修饰实例方法,静态方法和代码块,其作用是为了保证被修饰的方法或代码块在同一时间内,只有一个线程可以执行。那么我们先看看如何使用,因重点不是介绍使用,会快速而简单的介绍下。public class TestSynchronized { private static int count = 0; public synchronized void increase() { for (int i =原创 2021-03-12 18:42:02 · 228 阅读 · 1 评论 -
设计模式之装饰者模式的应用场景(Decorator)
问题装饰者模式的问题,我想从桥接模式引入,对桥接模式不了解的可以参考设计模式之桥接模式。桥接模式解决的问题是我卖的笔记本电脑的组成例如cpu或cache有很多种类型或大小,如果使用继承的方式,会生成非常多的类,难以维护。所以使用桥接模式,将cpu或cache抽象化,在生产电脑时,再将特定类型或大小的组成部分组装到笔记本电脑中。完美!但是呢,现在又一个问题出现了,客户对电脑要求越来越高,希望可以扩展插入SSD和内存条。嗯,听到这个问题,我觉得很简单呀,在电脑中继续扩展两个组件SSD和cache。这时候发现原创 2020-06-29 18:46:59 · 2007 阅读 · 1 评论 -
Java 8 Optional的使用
简介Optional是Java引入的类,用来解决空指针问题。并可以增加代码的整洁性。先看看源码介绍:A container object which may or may not contain a non-null value. If a value is present, isPresent() returns true and get() returns the value.Additional methods that depend on the presence or absence of原创 2020-05-11 11:32:22 · 240 阅读 · 0 评论 -
HashMap源码解析
一.构造函数共有四个构造函数,核心构造函数为 public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < 0) throw new IllegalArgumentException("Illegal initial capacity: " + ...原创 2019-11-12 14:17:23 · 121 阅读 · 0 评论 -
String-字符串常量池
由一道面试题发生的惨案 String s1 = new String("abc"); 创建了几个对象?答:2个。 String s1 = new String("abc"); String s2 = new String("abc");答:3个解析前面说过方法区中保存常量,可能大家都会觉得是声明为final的常量,还会保存字符串,叫做字符串常量池。我们...原创 2020-01-14 10:29:29 · 187 阅读 · 0 评论 -
重新认识JVM(1):内存模型(Java Memory Model)
简介做Android开发三年了,仍然对jvm了解停留于堆,栈,垃圾回收这些概念上,也看过很多关于JVM的介绍,总觉得只是一些理论,而无法与实际代码结合,这次就想从代码出发,彻彻底底的弄清楚JVM的机制。Main函数public static void main(String[] args) { System.out.println("hello, world"); }...原创 2019-12-27 17:44:17 · 147 阅读 · 0 评论 -
从List学习JAVA泛型
泛型的优点适用于多种数据类型执行相同的代码类型安全,编译期对参数类型判断,增加安全性取消强制类型转换泛型分类从List和ArrayList基本可以学习到泛型所有的知识点。泛型分为泛型类,泛型接口,泛型方法。先上一些源码:public interface List<E> extends Collection<E> { E get(int index);...原创 2019-12-23 15:00:59 · 363 阅读 · 0 评论