网站首页 > 基础教程 正文
数据类型
Java 的两大数据类型:内置数据类型、引用数据类型
回到目录
内置数据类型
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
byte、short、int、long、float、double、char、boolean
基本类型 | 范围 |
byte: | (8位)-128~127 |
short: | (26位)一个short变量是int型变量所占空间的二分之一 |
int: | (32位)-2^31 ~ 2^31 - 1 |
long: | (64位)、默认值是 0L |
float: | (32位)、默认值是 0.0f |
double: | (64 位)、默认值是 0.0d |
boolean: | 默认值是 false |
char: | (16 位)、【\u0000(十进制等效值为 0)~\uffff(即为 65535)】 |
Java Number类
在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类
包装类 | 基本数据类型 |
Byte | byte |
Short | short |
Integer | int |
Long | long |
Float | float |
Double | double |
Character | char |
Boolean | boolean |
会自动装箱和拆箱:
Character ch = new Character('a'); //可以不用创建对象;会自动装箱Character ch = 'a';// 原始字符 'a' 装箱到 Character 对象 ch 中 // 原始字符 'x' 用 test 方法装箱char c = test('x');// 返回拆箱的值到 'c'
回到目录
Java Character 类
常用方法:
方法 | 描述 |
isLetter() | 是否是一个字母 |
isDigit() | 是否是一个数字字符 |
isUpperCase() | 是否是大写字母 |
isLowerCase() | 是否是小写字母 |
回到目录
Java String 类
创建:
String str = "Runoob";// String 直接创建String str2=new String("Runoob");// String 对象创建
String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:
常用方法
方法 | 描述 |
int length() | 返回字符串对象包含的字符数 |
String concat(String str) | 连接字符串【更常用的是使用'+'操作符】 |
char charAt(int index) | 返回指定索引处的 char 值 |
boolean endsWith(String suffix) | 测试此字符串是否以指定的后缀结束 |
boolean startsWith(String prefix) | 测试此字符串是否以指定的前缀开始 |
boolean equalsIgnoreCase(String anotherString) | 将此 String 与另一个 String 比较,不考虑大小写。 |
byte[] getBytes() | 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中 |
char[] toCharArray() | 将此字符串转换为一个新的字符数组 |
int indexOf(String str/int ch) | 返回指定子字符串在此字符串中第一次出现处的索引 |
int lastIndexOf(String str/int ch) | 返回指定字符在此字符串中最后一次出现处的索引 |
String replace(char oldChar, char newChar) | 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的 |
String substring(int beginIndex, int endIndex) | 返回一个新字符串,它是此字符串的一个子字符串 |
String toLowerCase()/toUpperCase() | 使用默认语言环境的规则将此 String 中的所有字符都转换为小/大写 |
String trim() | 返回字符串的副本,忽略前导空白和尾部空白 |
static String valueOf(primitive data type x) | 返回给定data type类型x参数的字符串表示形式 |
valueOf(boolean b) | 返回 boolean 参数的字符串表示形式 |
contains(CharSequence chars) | 判断是否包含指定的字符系列 |
isEmpty() | 判断字符串是否为空 |
回到目录
Java 数组
声明数组变量和创建
dataType[] arrayRefVar = new dataType[arraySize];dataType[] arrayRefVar = {value0, value1, ..., valuek};dataType[] arrayRefVar = new dataType{value0, value1, ..., valuek};//完整格式 dataType arrayRefVar[] = {value0, value1, ..., valuek};//eg:int[] myList = new int[8]; int[] myList = new int[]{3, 1, 2, 6, 4, 2}int myList[] = {3,4,5,6,7,8,9,10};
Arrays 类
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。
说明 | 方法 | 函数 |
给数组赋值 | fill() | void fill(int[] a, int val) |
对数组排序 | sort(),按升序 | void sort(Object[] a) |
比较数组 | equals()比较数组中元素值是否相等 | boolean equals(long[] a, long[] a2) |
查找数组元素 | binarySearch()能对排序好的数组进行二分查找法操作 | int binarySearch(Object[] a, Object key) |
数据结构
Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:
枚举(Enumeration)、位集合(BitSet)、向量(Vector)、栈(Stack)、字典(Dictionary)、哈希表(Hashtable)、属性(Properties)
以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection)
回到目录
Java 集合框架
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。
Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
List、Map、Set的区别与联系
结构特点
List | Set | Map |
存储单列数据 | 存储单列数据 | 存储键值对 |
有顺序的,并且值允许重复 | 无顺序的,并且不允许重复 | 无序的,它的键是不允许重复的,但是值是允许重复的 |
实现类
List接口:
LinkedList | ArrayList | Vector |
基于链表实现 | 基于数组实现 | 基于数组实现 |
链表内存是散列的,增删快,查找慢 | 效率高,增删慢,查找快 | 效率低,增删慢,查找慢 |
非线程安全 | 非线程安全 | 线程安全 |
Set接口:
HashSet | LinkedHashSet | TreeSet |
基于HashMap 实现 | 继承于 HashSet、基于LinkedHashMap实现 | |
重写 equals()和 hash Code()方法 | ||
允许有 null 值 | ||
非线程安全 | 非线程安全 | 非线程安全 |
Map接口:
HashMap | HashTable | LinkedHashMap | SortMap |
支持 null 值和 null 键 | 不支持 null 值和 null 键 | HashMap 的一个子类 | 接口 TreeMap |
高效 | 低效 | 保存了记录的插入顺序 | 能够把它保存的记录根据键排序 |
非线程安全 | 线程安全 | 非线程安全 | 非线程安全 |
回到目录
List
ArrayList
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
初始化
import java.util.ArrayList; // 引入 ArrayList 类ArrayList<E> objectName =new ArrayList<>(); // 初始化
常用方法
方法 | 描述 |
add(int index,E element) | 将元素插入到指定位置的 arraylist 中 |
clear() | 删除 arraylist 中的所有元素 |
clone() | 复制一份 arraylist |
contains(Object obj) | 判断元素是否在 arraylist |
get(int index) | 通过索引值获取 arraylist 中的元素 |
set(int index, E element) | 替换 arraylist 中指定索引的元素 |
indexOf(Object obj) | 返回 arraylist 中元素的索引值 |
remove(Object obj) | 删除 arraylist 里的单个元素 |
size() | 返回 arraylist 里元素数量 |
isEmpty() | 判断 arraylist 是否为空 |
subList(int fromIndex, int toIndex) | 截取部分 arraylist 的元素 |
sort(Comparator c) | 根据指定的顺序对 arraylist 元素进行排序 |
toArray(T[] arr【可选参数】) | 将 arraylist 转换为数组【无参数返回类型为Object】 |
toString() | 将 arraylist 转换为字符串 |
lastIndexOf() | 返回指定元素在 arraylist 中最后一次出现的位置 |
trimToSize() | 将 arraylist 中的容量调整为数组中的元素个数 |
removeRange(int fromIndex, int toIndex) | 删除 arraylist 中指定索引之间存在的元素 |
LinkedList
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。
链表可分为单向链表和双向链表。
继承与实现:
继承了 AbstractSequentialList 类。
实现了 Queue 接口,可作为队列使用。
实现了 List 接口,可进行列表的相关操作。
实现了 Deque 接口,可作为队列使用。
实现了 Cloneable 接口,可实现克隆。
实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。
常用方法
方法 | 描述 |
boolean add(E e) | 链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
void add(int index, E element) | 向指定位置插入元素。 |
void addFirst(E e) | 元素添加到头部。 |
void addLast(E e) | 元素添加到尾部。 |
boolean offer(E e) | 向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
boolean offerFirst(E e) | 头部插入元素,返回是否成功,成功为 true,失败为 false。 |
boolean offerLast(E e) | 尾部插入元素,返回是否成功,成功为 true,失败为 false。 |
void clear() | 清空链表。 |
E removeFirst() | 删除并返回第一个元素。 |
E removeLast() | 删除并返回最后一个元素。 |
boolean remove(Object o) | 删除某一元素,返回是否成功,成功为 true,失败为 false。 |
E remove(int index) | 删除指定位置的元素。 |
E poll() | 删除并返回第一个元素。 |
E remove() | 删除并返回第一个元素。 |
boolean contains(Object o) | 判断是否含有某一元素。 |
E get(int index) | 返回指定位置的元素。 |
E getFirst() | 返回第一个元素。 |
E getLast() | 返回最后一个元素。 |
int indexOf(Object o) | 查找指定元素从前往后第一次出现的索引。 |
int lastIndexOf(Object o) | 查找指定元素最后一次出现的索引。 |
E peek() | 返回第一个元素。 |
E element() | 返回第一个元素。 |
E peekFirst() | 返回头部元素。 |
E peekLast() | 返回尾部元素。 |
E set(int index, E element) | 设置指定位置的元素。 |
int size() | 返回链表元素个数。 |
Object[] toArray() | 返回一个由链表元素组成的数组。 |
T[] toArray(T[] a) | 返回一个由链表元素转换类型而成的数组。 |
Java Collections框架的Stack类提供了堆栈的实现。但是,建议Deque用作堆栈而不是Stack类。这是因为Stack的方法是同步的。
以下是Deque接口提供的用于实现堆栈和队列的方法:
栈(后进先出):
Deque que = new LinkedList();que.push(e);//在双端队列的开头添加元素que.pop();//弹出栈顶que.peek();//查看栈顶
队列(先进先出)
add(E);//boolean 在队尾添加元素,添加成功返回true,如果队列已满无法添加则抛出异常。offer(E);//boolean 在队尾添加元素,添加成功返回true,如果队列已满无法添加则返回false。remove();//E 删除队头元素,并返回删除的元素,如果队列为null,抛出异常。poll();//E 删除队头元素,并返回删除的元素,如果队列为null,返回null。element();//E 获取队头元素,如果队列为null将抛出异常。peek();//E 获取队头元素,如果队列为null将返回null。
回到目录
Set
HashSet
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
创建对象:
HashSet<String> sites = new HashSet<String>();
常用方法
方法 | 描述 |
add(E) | 添加元素 |
contains(E) | 判断元素是否存在 |
remove() | 删除元素;删除成功返回 true,否则为 false |
size() | 计算大小; |
LinkedHashSet
TreeSet
回到目录
Map
HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
创建对象:
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
常用方法
方法 | 描述 |
put(key,E) | 添加元素 |
get(key) | 访问元素 |
remove(key) | 删除元素 |
clear() | 删除所有键值对 |
size() | 计算大小 |
isEmpty() | 判断 hashMap 是否为空 |
containsKey(Object key) | 检查 hashMap 中是否存在指定的 key 对应的映射关系 |
containsValue(Object value) | 检查 hashMap 中是否存在指定的 value 对应的映射关系。 |
replace(K key, V newValue) | 替换 hashMap 中是指定的 key 对应的 value |
getOrDefault(Object key, V defaultValue) | 获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值 |
values() | 返回 hashMap 中存在的所有 value 值。 |
猜你喜欢
- 2024-12-18 吊打 ThreadLocal,谈谈FastThreadLocal为啥能这么快?
- 2024-12-18 分布式锁中的王者方案 - Redisson
- 2024-12-18 你管这玩意儿叫高并发? 什么叫高并发
- 2024-12-18 系统数据实时同步方案一落地 系统间数据同步解决方案
- 2024-12-18 分布式锁工具:Redisson 分布式锁 redis zookeeper
- 2024-12-18 Spring Cloud Circuit Breaker快速入门Demo
- 2024-12-18 BitMap是啥?脑袋一下空白? bitmap文件头
- 2024-12-18 一亿个8位数字,用什么排序方法 一亿个8位数字,用什么排序方法最好
- 2024-12-18 10张图带你搞定高并发之网络IO模型
- 2024-12-18 「微服务架构」分布式锁Redission官方文档
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)