专业编程基础技术教程

网站首页 > 基础教程 正文

Java基础-数据类型和数据结构,初阶小白看过来~

ccvgpt 2024-12-18 12:36:53 基础教程 1 ℃

数据类型

Java 的两大数据类型:内置数据类型、引用数据类型

回到目录

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 值。

Tags:

最近发表
标签列表