数据结构基础之Java实现

Array

定义&初始化

两种格式含义相等,只分配了数组引用的存储空间,没有分配数组本身的存储空间。

int[] a1;
int a1[];

初始化:

int[] a1 = {1,2,3,4,5};
// 默认初始化成空值,对于数字就是0,对于布尔型是false
int[] array = new int[10];

对象数组保存的是引用,基本类型数组直接保存数组的值。如下创建了一个引用数组:
Integer[] a = new Integer[20];
直到通过创建新的Integer对象,并把对象赋值给引用,初始化才算结束。

复制

有三种方法,都是浅复制(Shallow Copy)
1.Arrays.copyOf(AnyType[] arr, int len)
2.System.arraycopy
3.arr.clone() 会声明新数组

多维数组

int[][] a = {{1,2,3}, {4,5,6}}
int[][] dir = new int[][] {(0,1),(0,-1),(1,0),(-1,0)};
int[][] dir = new int[][] {{0,1},{0,-1},{1,0},{-1,0}};

求长度

所有数组都有一个固有成员length,可以获取数据元素的数量,但不能修改。
array.length

排序

1.实现Comparable接口,并且使用标准类库的方法Arrays.sort()
2.创建一个实现了Comparator的单独的类

public class Interval {
    int start;
    int end;
}
Interval[] intervals;
Arrays.sort(intervals, new Comparator<Interval>() {
        public int compare(Interval i1, Interval i2) {
            return i1.start - i2.start;
        }
});

查找

如果数组已经排好序了,就可以使用Arrays.binarySearch()执行快速查找。

List

Collection是一个高级接口,包括List, Set, Queue三个子接口。
实现List接口的常用类有ArrayList, LinkedList, Vector, Stack, 其中前三种支持数据的线性存储和定位。

ArrayList

常用方法

扩容:


扩容

线程安全

Reverse linked list

两种解法:1.Iterative 2.Recursive

LinkedList:

方法:
addFirst(object)
addLast(object)
getFirst()
getLast()
removeFirst()
removeLast()

LinkedList<Integer> q = new LinkedList<Integer>();
q.pollFirst();
q.pollLast();
q.peekFirst();

Thread Safe Lists

Java提供了两种方便的机制:
1.Collections.sychronizedList
2.Vector

Stack:

实现

Java中的栈是线程安全的数据结构


image.png

image.png

构造

Deque<Integer> stack = new ArrayDeque<Integer>();
方法push, pop

相关题目

Min Stack
程序里检测括号是否对称

Queue:

Java中Queue接口主要方法是poll()和offer()
Queue的实现方法:
1.用LinkedList,维护head和rear
2.用Array,维护头尾两个index,头尾相碰时进行resize
3.用Stack,相关题目:Implement queue using stacks

注意

1.Queue不是线程安全的,Java中线程安全的Queue是Blocking Queue
Java中的阻塞队列
2.Deque接口是Stack和Queue的结合,可以通过它在线性结构头尾两段自由地存取元素。ArrayDeque可以自动扩容,但不是线程安全的,实现原理就是循环数组,因而比Stack和LinkedList快。
ArrayDeque接口:

addFirst(object)
addLast(object)
getFirst()
getLast()
removeFirst()
removeLast()

构造

Deque<Integer> queue = new ArrayDeque<Integer>();
queue.add, queue.poll
queue.addLast()
queue.pollFirst()

Queue的应用

BFS里用到queue,用queue做逐层记录。

Heap:

Min heap:最大的k个数
PriorityQueue<ListNode> pq = new PriorityQueue<>((a, b) -> (a.val > b.val ? 1 : -1)); 小根堆?
final PriorityQueue<Integer> pq = new PriorityQueue<>();//minHeap
final PriorityQueue<Integer> pq = new PriorityQueue<>(1000, Collections.reverseOrder());//maxHeap
pq.add(), pq.poll(), pq.peek()

ArrayList:

Object[] = list.toArray()

HashMap:

map.getOrDefault(n,0)
map.containsKey()

Tree

二叉树题目总结

BitSet:

bitset.set()
bitset.get()
bitset.nextClearBit()
bitset.clear()

String:

 char charAt(int index);
 char[] toCharArray();
 String.substring(int beginIndex, int endIndex);

StringBuilder vs StringBuffer

问题:HashTable的实现
线程安全的List

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容