string与位运算
1.String
String a="abc"; 会在常量池中开辟一个空间,保存"abc"
String b=new String("abc");
01.常量池没有abc,首先会在常量池中开辟一个空间,保存"abc"
02.再去堆中开辟空间,保存"abc"
03.b指向堆中的abc
a==b false
String c=new String("abc");
b==c false
intern():从常量池中取地址
a==b.intern() true
b.intern()==c.intern() true
=================================================================
String a="abc";
String b="a";
String c="bc";
a,b,c三者都是变量!!!!
a==(b+c) false
String a="abc";
final String b="a";
final String c="bc";
b,c两者都是常量!!!! 不允许被改变
a==(b+c) true
集合 Collection
存储一组相同数据类型的集合====》数组! Array Arrays
List 存储的是不唯一,无序的数据
ArrayList 数组
LinkedList 链表
Set 存储的唯一,无序的数据
HashSet的底层实现其实就是HashMap
TreeSet 有序的数据
Set set=new HashSet();
set.add("abc");
set.add(new String("abc"));
set.add(new String("abc"));
System.out.println(set.size()); 1
步骤:
01.ctrl+选中add 进入了 set的底层
02.再次点击add 进去hashSet的add()
map.put(k,v)
03.再次点击put()
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
不同的字符串,有可能hashcode值一致
相同的字符串,hashcode值绝对一致
以空间换时间 (猪圈)
04.再次点击putVal
05.观察代码 发现分为3个步骤
p.hash == hash &&
((k = p.key) == key || (key != null && key.equals(k)))
001.比较hash值 (简单int,如果hashcode不一致,不需要再比较了)
002.比较内存地址
003.比较具体的内容
==============================
Map
HashMap hash+链表(数据结构)
负载因子 0.75
如果超过了负载因子,则会创建原来bucket数组的两倍数量
线程不安全
HashTable (下次课讲解内容)
位运算
int newCapacity = 10 + (10 >> 1);
10000001 左为高 右为低
int 4个字节byte 32bit位
数字1 转换成 2 进制
00000000 00000000 00000000 00000001 32位
521 10进制
1*10的0次方 =1
2*10的1次方 =20
5*10的2次方 =500
00000000 00000000 00000000 00000101 5对应的2进制
1*2的0次方 =1
0*2的1次方 =0
1*2的2次方 =4
1G=1024MB 计算机在运行时
1G=1000MB
01010101 2进制
原码 ===》我们看到的 3
反码
补码 ===》真正运行的
01.正数的原码,反码,补码都一致
02.java中所有的数字都是有符号的 符号位 正数0 负数1
03.负数的反码=符号位不变+其他位取反(1变0 0变1)
04.负数的补码=反码+1
例子: 1-2
先把1转换成2进制
0 0 0 0 0 0 0 1
把-2转换成2进制
1 0 0 0 0 0 1 0 -2的源码
1 1 1 1 1 1 0 1 -2的反码
1 1 1 1 1 1 1 0 -2的补码
0 0 0 0 0 0 0 1 1的补码
+ 1 1 1 1 1 1 1 0
============================
1 1 1 1 1 1 1 1 结果的补码
1 1 1 1 1 1 1 0 结果的反码
1 0 0 0 0 0 0 1 结果的原码 -1
例子: 4-3
先把4转换成2进制
0 0 0 0 0 1 0 0
把-3转换成2进制
1 0 0 0 0 0 1 1 -3的源码
1 1 1 1 1 1 0 0 -3的反码
1 1 1 1 1 1 0 1 -3的补码
+0 0 0 0 0 1 0 0
==========================
0 0 0 0 0 0 0 1 结果的补码
算术右移
int newCapacity = 10 + (10 >> 1);
先算出10的2进制
0 0 0 0 1 0 1 0
0 0 0 0 1 0 1 0 符号位不变,低位溢出删除,高位补零!
==========================================
0 0 0 0 0 1 0 1
算术左移
10 << 1
先算出10的2进制
0 0 0 0 1 0 1 0
0 0 0 0 1 0 1 0 符号位不变,高位溢出删除,低位补零!
==============================
0 0 0 1 0 1 0 0 20
怎么以最快的速度从2 变成 8
先算出2的2进制
0 0 0 0 0 0 1 0
0 0 0 0 0 0 1 0 2<<2
============================
0 0 0 0 1 0 0 0 8
逻辑右移:不管符号位!低位溢出删除,高位补零!
10>>>2
先算出10的2进制
0 0 0 0 1 0 1 0
0 0 0 0 1 0 1 0
=======================
0 0 0 0 0 0 1 0
-1
1 0 0 0 0 0 0 1 原码
1 1 1 1 1 1 1 0 反码
1 1 1 1 1 1 1 1 补码 >>>1
1 1 1 1 1 1 1 1
========================
0 1 1 1 1 1 1 1
&& || ! 逻辑与或非 短路与或非 返回的都是boolean类型的值
位运算:
按位与 & 两位都为1,结果为1
3&4
0 0 0 0 0 0 1 1
& 0 0 0 0 0 1 0 0
===========================
0 0 0 0 0 0 0 0
按位或 | 两位有一位为1,结果为1
3|2
0 0 0 0 0 0 1 1
| 0 0 0 0 0 0 1 0
===========================
0 0 0 0 0 0 1 1
按位异或 ^ 必须是一位是0,一位是1,结果才为1
3^4
0 0 0 0 0 0 1 1
^ 0 0 0 0 0 1 0 0
===========================
0 0 0 0 0 1 1 1
按位取反 ~ : 就是数值+1之后取相反的值
~3
~ 0 0 0 0 0 0 1 1
=========================
1 1 1 1 1 1 0 0 负数
1 0 0 0 0 0 1 1 反码
1 0 0 0 0 1 0 0
string与位运算的更多相关文章
- Java基础语法(语法、位运算、JavaDoc等)
一.注释.标识符.关键字 1.注释(comments) 平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己编写的代码,但是当项目结构一旦复杂起来,我们就需要用到注释了! 注释并不会被程序执行, ...
- 简简单单学会C#位运算
一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...
- Java位运算经典实例
一 源码.反码.补码 正数的源码.反码.补码相同,例如5: 5的源码:101 5的反码:101 5的补码:101 负数的源码.反码.补 ...
- Java 位运算(移位、位与、或、异或、非)
Java提供的位运算符有:左移( << ).右移( >> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ...
- 关于PHP位运算的简单权限设计
写在最前面 最近想写一个简单的关于权限处理的东西,之前我也了解过用二进制数的位运算可以出色地完成这个任务.关于二进制数 的位运算,常见的就是“或.与.非”这三种简单运算了,当然,我也查看了下PHP手册 ...
- javascript位运算
javascript作为一门高级语言,他尽量让开发人员减少思考底层的硬件工作原理,而将精力集中在逻辑开发的层面.不过,不论这门语言多么高级,我们必须知道数据依然以bits的形式存储,有时候我们会直接与 ...
- CodeForces 282C(位运算)
C. XOR and OR time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 位运算 ZOJ 3870 Team Formation
题目传送门 /* 题意:找出符合 A^B > max (A, B) 的组数: 位运算:异或的性质,1^1=0, 1^0=1, 0^1=1, 0^0=0:与的性质:1^1=1, 1^0=0, 0^ ...
- 神奇的Noip模拟试题 T3 科技节 位运算
3 科技节 (scifest.pas/.c/.cpp) [问题描述] 一年一度的科技节即将到来.同学们报名各项活动的名单交到了方克顺校长那,结果校长一看皱了眉头:这帮学生热情竟然如此高涨,每个人都报那 ...
随机推荐
- 临时修改当前crontab编辑器
EDITOR=viexport EDITOR然后crontab -e就不会有这个问题了
- Linux上安装MySQL及其基础配置
本文主要介绍Linux下使用yum安装MySQL,以及启动.登录和远程访问MySQL数据库. 1.安装 查看有没有安装过: yum list installed mysql* rpm -qa | gr ...
- Python之配置文件读写
ConfigParser模块 一.创建配置文件 在D盘建立一个配置文件,名字为:test.ini 内容如下: [baseconf] host=127.0.0.1 port=3306 user=root ...
- python web框架 django 用pycharm 添加django项目
用pycharm 创建django项目 用pycharm 启动django 用项目名启动 点击蓝色连接的url 直接跳转到页面 修改 运行django 程序 设置 可以改端口 可以在创建djang ...
- linux文件编程----系统调用
linux中文件编程可以使用两种方法: 1).linux系统调用 2).C语言库函数 前者依赖于linux系统,后者与操作系统是独立的. 在 linux系统中,所有打开的文件也对应一个数字,这个数字由 ...
- JAVA与ACM
这两天学了一下JAVA的语法,还没有学习后面的核心地方,突然间觉得JAVA这门语言很棒,我要在接下来的时间系统的学习一下.就这么愉快地决定了. Java对于大数计算这方面的优势很大.最重要的是代码量小 ...
- struct初始化
C语言中struct初始化 • 普通结构体的初始化 假设我们有如下的一段代码,其中已有Student结构体,要求实例化一个Student对象并将其初始化. #include <stdio.h&g ...
- Java游戏服务器成长之路——感悟篇
又是一个美好的周末啊,现在一到周末,早上就起得晚,下午困了又会睡一两个小时,上班的时候,早上起来喝一杯咖啡,然后就能高效的工作一整天,然而到了周末人就懒散了,哈哈. 最近刚跳槽,到新公司已经干了有两周 ...
- Linux系统——特殊符号、通配符及正则表达式
特殊符号 | 管道符号,将管道符左边的命令的执行结果以字符串的形式通过 管道符传送到管道符右边命令末尾,作为管道符右边命令的执行 范围 > 输出重定向 >> 追加输出重定向 < ...
- PKU 2513 Colored Sticks(并查集+Trie树+欧拉路径(回路))
题目大意: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相连接的一端必须是同颜色的. 解题思路: 可以用图论中欧拉路的知识来解这道题,首先可以把木棒两端看成节点 ...