数组声明

int[] arr2 = new int[5];//推荐这种
int arr[] = new int[5];

数组初始化

int arr[] = new int[]{1, 3, 5, 7, 9};
int[] arr2 = {2, 4, 6, 8, 10};

添加元素以及取出元素

int[] arr = new int[5];
arr[0] = 1;
int a = arr[0];

遍历数组

public static void main(String[] args) {
  int arr[] = new int[]{1, 3, 5, 7 ,9};
  int[] arr2 = {2, 4, 6, 8, 10};
  for (int i = 0; i < arr.length; ++i) {
    System.out.print(arr[i] + "\t"); // 1 3 5 7 9
  }
  for (int x: arr2) {
    System.out.print(x + "\t"); // 2 4 6 8 10
  }
}

Arrays工具类的常用操作

方法

功能

备注

fill(int[] a, int val)

填充数组

fill(int[] a, int fromIndex, int toIndex, int val)

填充指定索引区间数组

左闭右开

sort(int[] a)

数组排序

sort(int[] a, int fromIndex, int toIndex)

排序指定索引的元素

copyOf(int[] original, int newLength)

复制数组

指定新数组长度

copyOfRange(int[] original, int from, int to)

复制数组

指定所复制的原数组的索引

Arrays.asList(stringArray).contains(“a”);

检查数组中是否包含某一个值

Arrays.binarySearch(str)

定位元素位置

前提是有序数组有序数组

Arrays.asList.indexOf(str);

定位元素位置

ArrayUtils工具类的常用操作

方法

功能

备注

ArrayUtils.addAll(intArray, intArray2);

连接两个数组

ArrayUtils.reverse(intArray);

数组翻转

ArrayUtils.removeElement(intArray, 3)

从数组中移除一个元素

返回一个删除后的新数组

字符串

String是不可变类型,即不能被修改

字符串的格式化

String fs = String.format("浮点型变量的值为 " +
                   "%f, 整型变量的值为 " +
                   " %d, 字符串变量的值为 " +
                   " %s", floatVar, intVar, stringVar);

String类常用操作

方法

功能

备注

charAt(int index)

返回指定索引处的 char 值。

contains()

判断是否包含指定的字符

endsWith(String suffix)

测试此字符串是否以指定的后缀结束。

equals(Object anObject)

将此字符串与指定的对象比较。

equalsIgnoreCase(String anotherString)

将此 String 与另一个 String 比较,不考虑大小写。

indexOf(String str)

返回指定子字符串在此字符串中第一次出现处的索引。

lastIndexOf(int ch)

返回指定字符最后一次出现处的索引。

int length()

返回此字符串的长度。

replace(char oldChar, char newChar)

替换子串

返回一个新的字符串

split(String regex)

字符串分割

substring(int beginIndex,int endIndex)

字符串切片

返回一个新的字符串

toLowerCase()

使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

toUpperCase()

使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

trim()

删除字符串左右空元素

返回字符串的副本

isEmpty()

判断字符串是否为空。

集合框架

Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。

Java集合框架图

java数据结构参考文献_java

Java集合框架体系图

java数据结构参考文献_java数据结构参考文献_02

ArrayList

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。

java数据结构参考文献_java_03

初始化

import java.util.ArrayList; // 引入 ArrayList 类
ArrayList<E> objectName =new ArrayList<>();  // 初始化

ArrayList类常用操作

方法

功能

备注

add()

将元素插入到指定位置的 arraylist 中

addAll()

添加集合中的所有元素到 arraylist 中

clear()

删除 arraylist 中的所有元素

clone()

复制一份 arraylist

contains()

判断元素是否在 arraylist

get()

通过索引值获取 arraylist 中的元素

indexOf()

返回 arraylist 中元素的索引值

removeAll()

删除存在于指定集合中的 arraylist 里的所有元素

remove()

删除 arraylist 里的单个元素

size()

返回 arraylist 里元素数量

isEmpty()

判断 arraylist 是否为空

subList()

截取部分 arraylist 的元素

左开右闭

set(index,newValue)

更新指定索引的元素

sort()

对 arraylist 元素进行排序

默认为升序排列

toArray()

将 arraylist 转换为数组

lastIndexOf()

返回指定元素在 arraylist 中最后一次出现的位置

retainAll()

保留 arraylist 中在指定集合中也存在的那些元素

containsAll()

查看 arraylist 是否包含指定集合中的所有元素

forEach()

遍历 arraylist 中每一个元素并执行特定操作

LinkedList

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。

链表可分为单向链表和双向链表。

LinkedList 继承了 AbstractSequentialList 类。

LinkedList 实现了 Queue 接口,可作为队列使用。

LinkedList 实现了 List 接口,可进行列表的相关操作。

LinkedList 实现了 Deque 接口,可作为队列使用。

LinkedList 实现了 Cloneable 接口,可实现克隆。

LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。

java数据结构参考文献_链表_04

LinkedList常用操作

方法

描述

备注

add(E e)

末尾添加元素

返回布尔值

add(int index, E element)

向指定位置插入元素。

返回布尔值

addFirst(E e)

元素添加到头部。

addLast(E e)

元素添加到尾部。

get(int index)

返回指定位置的元素。

getFirst()

返回第一个元素。

getLast()

返回最后一个元素。

remove()

删除并返回第一个元素。

removeFirst()

删除并返回第一个元素。

removeLast()

删除并返回最后一个元素。

remove(Object o)

删除某一元素

返回布尔值

remove(int index)

删除指定位置的元素。

set(int index, E element)

设置指定位置的元素。

contains(Object o)

判断是否含有某一元素。

indexOf(Object o)

查找指定元素从前往后第一次出现的索引。

lastIndexOf(Object o)

查找指定元素最后一次出现的索引。

clear()

清空链表。

size()

返回链表元素个数。

addAll(Collection c)

将一个集合的所有元素添加到链表后面

返回布尔值

addAll(int index, Collection c)

将一个集合的所有元素添加到链表的指定位置后面

返回布尔值

ArrayList与LinkedList的抉择

ArrayList :是顺序结构,查找和修改速度快,就像电影票

LinkedList :是链表结构,增加和删除速度快,就像佛珠

以下情况使用 ArrayList :

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。

HashSet

HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合

HashSet 允许有 null 值

HashSet 是无序的,即不会记录插入的顺序

HashSet 不是线程安全的

HashSet 实现了 Set 接口

java数据结构参考文献_数据结构_05

HashSet类常用方法

方法

描述

备注

add()

添加元素

remove(value)

删除元素

contoins(value)

判断是否存在元素

size()

得到元素个数

for-each

迭代

HashSet、LinkedHashSet、TreeSet的抉择

HashSet: 无序

LinkedHashSet: 按照插入顺序

TreeSet: 从小到大排序

HashMap

HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。

HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。

HashMap 是无序的,即不会记录插入的顺序。

HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。

java数据结构参考文献_java_06

HashMap类常用操作

方法

功能

描述

put()

将键/值对添加到 hashMap 中

get()

获取指定 key 对应对 value

getOrDefault()

获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值

remove()

删除指定键 key 的映射关系

containsKey()

是否存在指定的 key

keySet()

返回 hashMap 中所有 key 组成的集合视图。

values()

返回 hashMap 中存在的所有 value 值。

isEmpty()

判断 hashMap 是否为空

size()

计算 hashMap 中键/值对的数量

forEach()

对 hashMap 中的每个映射执行指定的操作。

containsValue()

检查 hashMap 中是否存在指定的 value 对应的映射关系。

HashMap与Hashtable的抉择

HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式

区别1:

  • HashMap可以存放 null
  • Hashtable不能存放null

区别2:

  • HashMap不是线程安全的类
  • Hashtable是线程安全的类

Collections工具类

Collections是一个类,容器的工具类,就如同Arrays是数组的工具类

方法

功能

备注

reverse

反转

shuffle

混淆

sort

排序

swap

交换

rotate

滚动

synchronizedList

线程安全化