Java基本类型和数据结构

本文详细介绍了Java中的基本类型及其精度丢失和溢出问题,转换规则,以及常用类如String和Date。同时,文章深入讲解了数据结构,包括数组、链表、栈、队列、二叉树和哈希表等,分析了它们的特点和应用场景。此外,还涵盖了Java集合框架,如List、Set、Map的实现和性能,并提及了Android特有的集合类ArrayMap和SparseArray。最后讨论了遍历和排序方法。
摘要由CSDN通过智能技术生成

基本类型

这里写图片描述

这里写图片描述

①精度丢失和溢出?
精度丢失一般发生在浮点型存储数值或类型强制转换的时候。我们知道计算机存储数值实际存储的是二进制,举个粟子

double r1 = 1 - 0.99;
double r2 = 2 - 0.99 

r1的值是0.010000000000000009,r2的值为1.01,因为0.99转换成二进制的时候就已经精度丢失了。小数二进制和十进制的转换方法,类似于十进制无法表达1/3一样。所以进行计算后有可能计算出来的数值不正确(是否正确主要看二者进行二进制的运算后再转换回十进制是否正确了)

溢出一般发生在赋值超出了目标类型所能表达的范围
如byte表达范围在【-128~127】之间,如果赋值130的话则

//130的二进制
0000 0000 0000 0000 0000 0000 1000 0010
//强制类型转换后
1000 0010
//第一位为1的为负数,负数用补码表示,所以要显示原码,要取反加1,即
0111 1110
//转换成十进制,加上符号位就是-126

PS:精度丢失在计算中的解决方法,使用String来保存数值,计算时使用BigDecimal来进行计算。

②转换问题?

  1. 类型由小到大自动转换,由大到小需强制转换,小数部分直接舍掉。
//需强制转换且a的值为10
int a = (int)10.8
  1. 整型字面常量的大小超出目标类型所能表示范围也需要强转,溢出
//需强制转换,b1为-128,b2为-127
byte b1 = (byte)128;
byte b2 = (byte)129;
  1. 复合运算符(+=、-=、*=、/=、%=)是可以将右边表达式的类型自动强制转换成左边的类型
int a = 8;  
short s = 5; 
s += a;
s += a+5; 
  1. char是无符号类型,其他类型转换成char都需要显式强制转换,赋值负数也需要强制转换

PS:Java中类属性变量会默认赋初始值,局部变量则需要手动初始化,引用数据类型不管在哪都会被赋予初始值null,String类型的初始值也是null

常用类

String
Date

正则表达式

数据结构概述

基本组成
  • 数组:
    优点:内存空间连续,查询快,相对其他结构消耗内存空间小
    缺点:初始化时就需要分配数组(内存)大小,不支持动态扩充,插入和删除慢
    一维数组是在内存连续分配的一段存储空间,多维则如下
    这里写图片描述

数组声明后会便会在连续内存空间中进行内存分配,并赋初始值

//此时,int[1] = 0
int[] array = new int[3];
  • 链表:内存空间不连续,插入删除快
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值