Java数据结构
1.基础数据类型
| 类型 | 大小 | 范围 |
| byte | 1 byte | -128~127 |
| boolean | 1 byte | true / false |
| short | 2 byte | -32768~32767 |
| char | 2 byte | ASCII / GB2312 |
| int | 4 byte | -2147483648~2147483647 |
| float | 4 byte |
1.4e-45~3.4e38 -3.4e38~-1.4e-45 |
| long | 8 byte | -2^63~2^63-1 |
| double | 8 byte |
4.9e-324~1.7e+308 -1.7e308~-4.9e-324 |
在给 long float double 赋值时,数字要加后缀 l f d。
可以先声明再赋值,也可以声明时就赋值。
2.数组
2.1 一维数组
初始化有三种方式
特点是要么只设定长度,要么只给定内容
实现原理是数组中存放一个地址,指向堆中一块连续内存区域。
原则上已经初始化的数组不能改长度,但如果让它等于另外一个数组,就相当于拷贝了另一个数组的内存地址,即可实现改变长度的操作
int[] arr = {1, 2, 3}; int[] arr = new int[]{1,2,3}; int[] arr = new int[3];
2.2 二维数组
就是元素为数组的一维数组,所以每行的列数没有非要相等。
int[][] a = new int[2][]; a[0] = new int[2]; a[1] = new int[3];
直接初始化用大括号套大括号
int[][] a = {{2,3},{4,5}};
3.String 类型
初始化主要有两种方法,直接赋值或者用 new
String s1 = “还是会想你”; String s2 = new String ("想走进你心里");
可以用 + 连接多个字符串
String s3 = s1 + ",";
s3 += s2;
常用操作有 Empty() 查询是否为空 ,length() 查询长度。取对应位置的值 charAt(索引),直接相减比较求值 compareTo(字符串),判断是否相等equals(字符串)。
注意 String 又被称为不可变字符串,一旦赋值内容就不能改变,除非指向另外一个String的地址。
对比两个字符串最好使用equals(),这样才是直接对比字符串内容。== 方法比较的是存放内容的地址值,返回的结果往往与预期不符。
boolean tellMeTheTruth = s1.equals("还是会想你"); //true
4.LinkedList 链表
链表适合增删,数组适合随机访问。
- 链表如果需要顺序访问,可以用 Iterator 迭代器。
Iterator 迭代器,接口有三个方法,next() 不断访问下一个元素,hasNext()返回boolean值代表是否有下一个元素,remove()删除上一次访问的元素。有索引的数据集(如ArrayList)访问会按照一定顺序,对于无索引的HashSet,访问无序。
- 链表如果需要随机访问,可以用 get(索引) 和 set(索引,元素) 的方法。
前者返回对应索引位置上的元素,由于顺序查找且无缓存,多次查找开销较大。后者把对应位置的元素换成传入的数据。返回值是链表中的原始数据。
一般的集合类需要实现 Collection 接口,包括迭代器 iterator(),元素个数 size(),判断是否为空isEmpty(),判断是否含有某个元素contains(元素),containsAll(数据集),添加add(元素),addAll(数据集),删除remove(元素),removeAll(数据集),删除所有元素clear(),反向选择后删除retainAll(数据集),返回集合的对象数组toArray()。
5.HashSet 散列
带 Hash 的特点是插入和用 Iterator 访问无序底层实现是根据键的值算出哈希值,再根据特定的除法或取余算法再链表数组中找到对应索引的链表然后挂上去?
Set 的特点是不允许加入重复值。
6.TreeSet 树表
底层是红黑树,添加元素时会被添加到正确的位置,比 HashSet 慢,比链表和数组快,对于n个元素的红黑树,查找新元素的位置平均需要log2N次比较。
对象的比较可以用a.compareTo(b),相同返回0,a在b之前返回负值,a在b之后返回正值,a的位置 - b的位置,
7.Queue队列
ArrayDeque 和 LinkedList 都可以用来做队列或双端队列。
队列最显著的特点是先进先出。加入的元素会被放在队尾,队头的元素先弹出。
8.PriorityQueue 优先级队列
按照特定的顺序来排序,而非按照插入顺序来排序,最先被 remove 的会是优先级最小的元素。底层实现是堆→自我调整的二叉树,总是能让优先级最小的元素移动到 root。
9.Map 映射表
储存的最小单元是键值对,散列 HashMap 元素无序,树映射 TreeMap 有序,前者速度更快,如果 put() 相同的键,会覆盖上一个值,并返回上一个值。remove一个键值对,size 返回元素数。
10.Stack 栈
有 压栈 push(元素),弹出并返回pop(),返回栈顶元素peek()
11.Vector 动态数组
历史遗留
posted on 2023-03-05 22:27 MIXTAPE_208 阅读(18) 评论(0) 收藏 举报
浙公网安备 33010602011771号