java之StringBuilder StringBuffer String
java之StringBuilder StringBuffer String
在使用 StringBuffer 或StringBuilder 类时,每次都会对对象本身进行操作,而不是像String生成新的对象
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容是可变的
StringBuilder StringBuffer(方法基本相同)常用方法 12345678910111213141516171819202122232425262728StringBuilder sb = new StringBuilder();// 对象名.length() 序列长度System.out.println ...
java8新特性--Stream流式编程
java8新特性–Stream流式编程
对于流式编程, 学过scala和python的同学应该有所了解, 举个例子
1234567891011List<String> list = new ArrayList<>();list.add("张无忌");list.add("周芷若");list.add("赵敏");list.add("张强");list.add("张三丰");list.stream() .filter(s -> s.startsWith("张")) .filter(s -> s.length() == 3) .forEach(System.out::println);
是不是十分简洁优雅, 我当时学习scala的时候, 就被这种流式编程所惊艳到, 进而了解到java8也有这种特性, 以后输出数组什么的再也不用for循环了
获取流
List Set直接.stream()
m ...
Java 自动装箱 自动拆箱
Java 自动装箱 自动拆箱
为什么会写这篇文章? 因为在比较两个ArrayList<Integer>元素的值是否完全对应相等时, 遇到了一个大坑
明明都是-685, 怎么就不相等了呢? 起初猜想是因为Integer比较的是地址, 但5判断的是相等啊, 又经过一番搜索, 才明白, 遂写下以记录
自动装箱 自动拆箱于JDK1.5中引入
int常量池要搞清楚上面这个问题, 就要了解常量池
JVM会自动维护八种基本类型的常量池,int常量池中初始化-128~127的范围
我们来看一下Integer.java的源码来验证一下
JVM在启动时就已经将-128~127的Integer对象全部new出来, 因为这个范围内的数比较常用
自动装箱定义: 自动将基本数据类型转换为封装类型(如int转为Integer)
12// 自动装箱Integer a = 5; // 相当于Java编译器替我们执行了 Integer.valueOf(5);
可以通过反编译class文件看出
valueOf方法会判断数值在不在-128~127范围内, 在的话直接返回已经创建的Integ ...
Java List排序
Java List排序
首先介绍常用的排序用法
Collections.sort(List list) //默认升序, 类需实现Comparable接口, 重写compareTo方法
Collections.sort(List list,Comparator<? super T> c) //传递一个比较器对象, 需重写compare方法
Comparable接口整个Comparable.java文件只有一个方法compareTo
基本类型的封装类基本类型的封装类(Integer String等)都已经实现了Comparable接口并重写了compareTo方法, 所以可以直接Collections.sort(List list);, 不用传递Comparator 了
如Integer.java文件
自定义类自定义类想实现比较的话, 也可以实现Comparable接口并重写了compareTo方法
Comparator 接口Comparator 接口的方法比较多, 但我们只需关注compare方法
传递比较器, 重写co ...
j2ee笔记
request中文乱码问题
get:tomcat7及以下版本,get方式获取参数会乱码,
post:都会乱码
因为java默认编码ISO-8859-1不支持中文
解决仅针对post1request.setCharacterEncoding("utf-8");
针对get,慎用,仅针对会乱码的情况(如果原来不乱,用之后会乱)12new String(request.getParameter("name").getBytes("ISO-8859_1"),"utf-8");
IOC AOP
IOC AOPIOC-控制反转(Inversion of Control)
为了降低对象之间的耦合度, 实现解耦
IOC容器去控制对象bean的生命周期, 而不是对象的使用者
不需要对象的使用者去创建对象, 赋予各种属性, 而是由IOC容器去做, 对象的使用者直接把对象拿来用
控制反转是目的, 手段是依赖注入(DI)(Dependency Injection)
对象之间不在相互依赖, 通过一个第三方实现解耦
IOC也叫依赖注入(DI), 获得依赖对象的过程由自身管理变为了由IOC容器主动注入
IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗
●谁依赖于谁:当然是应用程序依赖于IoC容器;
●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
●谁注入谁:IoC容器注入应用程序依赖的对象;
●注入了什么:注入某个对象所需要的外部资源(包括对象、资源、常量数据)
一般通过xml文件告诉容器如何创建组件,以及各组件的依赖关系
123456789<beans> <bean id="dataSource" cl ...
home-assistant
home-assistant梦开始的地方1docker run -d --restart=always --name="home-assistant" -e TZ=Asia/Shanghai -v /root/data/docker_data/hassistant:/config -p 8123:8123 -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/aarch64-homeassistant:latest
hacs 另一个梦开始的地方
试过好多,直接github下载hacs放到custom_components不可行
要用脚本
1curl https://sl.zaqai.com/hacs.sh|bash
如果hacs确实安装不来,就先装个xiaomi-miot吧,同理,最好用脚本,虽然我直接放也成功过
1wget -q -O - https://raw.fastgit.org/al-one/hass-xiaomi-miot/master/install.sh | HUB ...
go vs java
go vs java内存占用一个明显的感觉,用java写的应用在服务器上运行,动辄吃掉几百M的内存,而go应用,也就几十M
今天[刷题](力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台),两种方法,java都是40+MB的内存,而go都是3MB,虽然leetcode的内存消耗可能也就看一乐呵,不过还是能在一定程度上说明问题的。
git
git
初始化: git init
克隆: git clone url
查看文件状态: git status [filename]
查看文件更改的地方: git diff filename
添加所有文件到暂存区git add .
提交到本地仓库git commit -m "message", m参数表示附带提交信息
主目录下的.gitignore文件有如下规则:
1.忽略文件中的空行或以井号(#)开始的行将会被忽略。
2.可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围大括号([string1,string2,..))代表可选的字符串等。
3.如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
4.如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
5.如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)
一个流程
初始化一个目录
修改目录中的文件
...
docker打包容器 载入容器
docker打包容器 载入容器打包docker export 容器id > filename.tar
载入docker import filename.tar repository:tag