基本数据类型
byte
byte
是一种基本数据类型,用于表示字节(byte)数据。byte
类型占用 8 位(1 字节)内存空间,取值范围是 -128 到 127。它通常用于存储小整数值或者表示二进制数据
整数Int
缓存的范围,默认情况下,Java 缓存了 -128 到 127 之间的整数对象
Integer类
short
long
You can always assign a value of int type to a variable of long type without loss of information.
您总是可以将int类型的值赋给long类型的变量,而不会丢失信息。
Long requires the most amount of memory.
Long需要最多的内存。
单精度浮点数Float
双精度浮点数Double
布尔值Boolean
In Java, the word true is a Boolean literal.
在Java中,true这个词是一个布尔字面值。
You can't cast a Boolean value to an int, or an int to Boolean.
不能将布尔值转换为int,也不能将int转换为布尔值。
The relational operator can be used to compare two values.
关系运算符可用于比较两个值。
字符char
方法 | 描述 |
isDigit(ch) | 如果是数字返回true |
isLetter(ch) | 如果是字母返回true |
isLetterorDigit(ch) | 如果是字母或数字,返回true |
isLowerCase(ch) | 如果是小写字母,返回true |
isUpperCase(ch) | 如果是大写字母,返回true |
toLowerCase(ch) | 变成小写 |
toUpperCase(ch) | 变成大写 |
引用数据类型
字符串String
方法
string.charAt(index) | 返回指定位置的字符 |
string.toUpperCase() | 返回一个新的字符串,所有字母大写 |
string.equalsIgnoreCase(s1) | |
string.toLowerCase() | 返回一个新的字符串,所有字母小写 |
string.concat(s1) | 与s1链接,返回一个新的字符串 |
string.trim() | 返回一个新的字符串,去掉两边的空白字符 |
string.equals(s1) | |
string.compareToIgnoreCase | |
string.compareTo | |
string.length() | 返回字符数长度 |
String(不变) vs StringBuffer(多线程) vs StringBuilder(单线程)
String是不可变的,如果尝试去修改,会新生成一个字符串对象,StringBuffer和StringBuilder是可变的
StringBuffer是线程安全的,StringBuilder是线程不安全的,所以在单线程环境下StringBuilder效率会更高
如果你的字符串不需要改变,用String会比StringBuffer更能提高性能。If your string does not require any changes, you should use String rather than StringBuffer to improve performance.
数组Array
二级array:
int[][] m=new int[row][col]
m.length=row
m[0].length=col
赋值方式:
int[][] result={{1,2,3,4},{5,6,7,8}}
array拷贝
list1=list2 | 浅拷贝:仅仅改变地址,并未改变内容 |
arraycopy方法 | 深度拷贝:创造一个新的数组 |
ArrayList vs LInkedList(双端队列)vs Vector
ArayList和LinkedList都实现了List接口,LinkedList还实现了Deque接口
查询速度
小结论:arraylist更加快,vector最慢
ArrayList是基于索引的数据接口,它的底层是数组。它可以以0(1)时间复杂度对元素进行随机访问。
LinkedList是以元素列表(链表)的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。
操作
相对于ArayList, LinkedList的插入、添加、删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
vector操作也非常复杂
内存
LinkedListL更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
什么场景下更适宜使用LinkedList
1)你的应用不会随机访问数据
2)你的应用更多的插入和删除元素,更少的读取数据
什么场景使用vector
需要线程安全,但不要求速度
CopyOnWriteArrayList
特点:
1. 添加元素时枷锁
2. 读取时不加锁
底层原理
1.用过数组来实现的,在向CopyOnWriteArrayList添加元素时,会复制一个新的数组,写操作在新数组上进行,读操作在原数组上进行
2.写操作会加锁,防止出现并发写入丢失数据的问题
3. 写操作结束之后会把原数组指向新数组
4.CopyOnWriteArrayList允许在写操作时来读取数据,大大提高了读的性能,因此适合读多写少的应用场景,但是CopyOnWriteArrayList会比较占内存,同时可能读到的数据不是实时最新的数据,所以不适合实时性要求很高的场景