Java数据结构
Posted fanshaoxiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java数据结构相关的知识,希望对你有一定的参考价值。
一、线性数据结构
1、Java一维数组的创建
(1)预先定义数组的内存空间
int[] arr = new int[3];
// new int[3]是代表创建3个内存地址空间
// 地址空间的序号是按照0开始的,也就是说0为1号位置 arr[1] =2; //每二个内存地址空间都赋一个值 第二个位置赋值 2 arr[2] =4; //第二个内存地址空间赋值为 4 arr[0] =3; //第一个内存地址空间赋值为 3
//for循环遍历arr每一个数组元素并且打印 for (int i=0;i<arr.length;i++) { System.out.println(arr[i]); }
(2) ArrayList的创建和使用
import java.util.ArrayList;
import java.util.LinkedList;
public class Case {
public static void main(String[] args){
ArrayList data = new ArrayList();
//add是增加某个元素
data.add(1);
data.add(3);
data.add(2);
data.add(4);
for (int i=0;i< data.size();i++) {
//get是通过索引获取元素
System.out.println(data.get(i));
}
System.out.println("------------------------");
//移除某个索引上的元素
data.remove(2);
for (int i=0;i< data.size();i++) {
System.out.println(data.get(i));
}
System.out.println("------------------------");
/**
* data有1,2,4三个元素
*/
//判断ArrayList是否为空
System.out.println(data.isEmpty());
//获取某个元素的索引
System.out.println(data.indexOf(4));
}
ArrayList的内存地址是相邻的,假设动态数组A有3个元素a1,a2,a3.如果a1地址为1,则a2,a3为2,3.所以他的遍历速度很快,获得元素很快,弊端就是插入和删除节点时速度较慢,就比如在1号索引插入数据a4则a4的内存地址为2,那么原先1号地址的a2以及后面的元素将全部后移。
(3) LinkedList的创建和使用(基于链表的数据结构)
public static void main(String[] args) { //创建链表(import java.util.LinkedList) LinkedList<Object> data = new LinkedList<>(); //add(index,element)增加 data.add(0,2); data.add(3); data.add(4); data.add(5); for(int i=0;i<data.size();i++) { System.out.println(data.get(i)); } //判断是否包含元素3 System.out.println(data.contains(3)); }
链表数据结构,的内存地址是不连续的具体如下图所示:
得益于其内存地址无规律,其链表结构图也从侧面反应了,在某个地方增加节点(删除)其后续节点不需要移动,所以其增删性能优于动态数组。
二、非线性结构
其结构如下图所示:
A,B,C称为节点,连接节点之间的线称为边。CDF成为叶节点(因为它们没有字节点),而A为根节点。
常见的树型:二叉树(树的每个节点最多只能有两个子节点)
(1)二叉搜索树要求:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
以上是关于Java数据结构的主要内容,如果未能解决你的问题,请参考以下文章