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与位运算的更多相关文章

  1. Java基础语法(语法、位运算、JavaDoc等)

    一.注释.标识符.关键字 1.注释(comments) 平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己编写的代码,但是当项目结构一旦复杂起来,我们就需要用到注释了! 注释并不会被程序执行, ...

  2. 简简单单学会C#位运算

    一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...

  3. Java位运算经典实例

    一 源码.反码.补码 正数的源码.反码.补码相同,例如5:            5的源码:101            5的反码:101            5的补码:101 负数的源码.反码.补 ...

  4. Java 位运算(移位、位与、或、异或、非)

    Java提供的位运算符有:左移( << ).右移( >> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ...

  5. 关于PHP位运算的简单权限设计

    写在最前面 最近想写一个简单的关于权限处理的东西,之前我也了解过用二进制数的位运算可以出色地完成这个任务.关于二进制数 的位运算,常见的就是“或.与.非”这三种简单运算了,当然,我也查看了下PHP手册 ...

  6. javascript位运算

    javascript作为一门高级语言,他尽量让开发人员减少思考底层的硬件工作原理,而将精力集中在逻辑开发的层面.不过,不论这门语言多么高级,我们必须知道数据依然以bits的形式存储,有时候我们会直接与 ...

  7. CodeForces 282C(位运算)

    C. XOR and OR time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  8. 位运算 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^ ...

  9. 神奇的Noip模拟试题 T3 科技节 位运算

    3 科技节 (scifest.pas/.c/.cpp) [问题描述] 一年一度的科技节即将到来.同学们报名各项活动的名单交到了方克顺校长那,结果校长一看皱了眉头:这帮学生热情竟然如此高涨,每个人都报那 ...

随机推荐

  1. python爬虫系列(2)—— requests和BeautifulSoup

    本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...

  2. 文件传输(xmodem协议)

    https://www.menie.org/georges/embedded/ 需要移植如下两个基础的硬件读写函数 int _inbyte(unsigned short timeout); void ...

  3. Linux使用scp命令实现文件的上传和下载

    上传本地/data/project/test.zip 文件至远程服务器192.168.1.2的 /root 目录下,代码如下: scp /home/project/test.zip  root@192 ...

  4. Linux kill和kill-9区别

    进程状态转换图 kill和kill -9,两个命令在linux中都有杀死进程的效果,然而两命令的执行过程却大有不同,在程序中如果用错了,可能会造成莫名其妙的现象. 执行kill命令,系统会发送一个SI ...

  5. request.getInputStream() 流只能读取一次问题

    问题: 一次开发过程中同事在 sptring interceptor 中获取 request body 中值,以对数据的校验和预处理等操作 .导致之后spring 在读取request body 值做 ...

  6. PHP 基础篇 - PHP 的 BC MATH 系列数学函数

    一.常见问题 用 PHP 做计算时经常会遇到精度带来的问题,下面来看两个常见的例子: 1. 运算比较 下面表达式输出的结果不是相等: <?php echo 2.01 - 0.01 == 2 ? ...

  7. HTML5中Video和Audio

    相关属性 src属性 该属性指定媒体数据的URL地址. autoplay属性 在该属性中指定是否在页面加载后自动播放,使用方法: <video src="test.mov" ...

  8. (转)VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径说明

      $(RemoteMachine) 设置为“调试”属性页上“远程计算机”属性的值.有关更多信息,请参见更改用于 C/C++ 调试配置的项目设置. $(References) 以分号分隔的引用列表被添 ...

  9. 5、RabbitMQ - Exchange之 fanout \ 【direct 关键字发送】 \ topic

    pytho系列之 RabbitMQ - Exchange几种模式 RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 Rab ...

  10. php int 与 datetime 转换

    数据库日期类型是int类型的,该查询结果是datetime类型的 select from_unixtime( `dateline` ) from cdb_posts 如果原来类型是datetime类型 ...