
Java数据结构
文章平均质量分 64
无名同学
不到南山终不休
展开
-
线段树 java
public class SegmentTree { public static void main(String[] args) { SegmentTree tree = new SegmentTree(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9}); System.out.println(tree.query(0, 2)); tree.add(1, 2, 3); System.out.println(tr原创 2022-05-29 17:34:48 · 181 阅读 · 0 评论 -
快速排序2
public class Shellsort2 { public static void sort(List items){ if(items.size()>1){ List smaller=new ArrayList List same=new ArrayList List larger=n原创 2017-04-01 19:26:44 · 233 阅读 · 0 评论 -
散列表的基本原理与实现
一、概述 符号表是一种用于存储键值对(key-value pair)的数据结构,我们平常经常使用的数组也可以看做是一个特殊的符号表,数组中的“键”即为数组索引,值为相应的数组元素。也就是说,当符号表中所有的键都是较小的整数时,我们可以使用数组来实现符号表,将数组的索引作为键,而索引处的数组元素即为键对应的值,但是这一表示仅限于所有的键都是比较小的整数时,否则可能会使用一个非常大的数组。散转载 2017-04-03 10:29:45 · 547 阅读 · 0 评论 -
链表实现的散列表(Java版)
public class SeparateChainingHashTable { private static final int DEFAULT_TABLE_SIZE=101;//初始化散列表的大小 private List [] theLists;//指向散列表的引用 private int currentSize;//当前插入元素的个数 public原创 2017-04-03 14:33:53 · 662 阅读 · 0 评论 -
拓扑排序
拓扑排序,顾名思义,就是一种排序方法。这是一种什么排序?这种排序的作用?然后怎么去实现这种排序算法?现在就让我们仔细研究下。1、什么是拓扑排序,也就是拓扑排序的概念实际上,拓扑排序是一种图论算法,该算法在《数据结构与算法》一书中有涉猎。引用维基百科的定义:在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological sorti转载 2017-04-19 12:50:42 · 284 阅读 · 0 评论 -
拓扑排序(Java实现)
仿照前面那个c++写的,具体思路请看上一个博客,只是用Java实现了一下class Node{ public int adjvex; public Node next;}public class Sort { private ArrayList mystack=new ArrayList private Node p; private原创 2017-04-19 12:53:42 · 1314 阅读 · 0 评论 -
n对括号组合的所有情况
public class KuohaoTest { public static Set selectAll(int n){ Set result=new HashSet; if(n==1){ result.add("()"); }else { Set result1=selectAll(n-1)原创 2017-05-04 21:00:26 · 586 阅读 · 0 评论 -
二插查找树的Java实现
public class BinarySearchTree> { private Node root;//根节点 private int count;//节点数 /* * 类部节点类 */ private static class Node{ E value; Node parent;//父亲节点原创 2017-03-27 16:10:16 · 671 阅读 · 0 评论 -
快速排序1
public class Main { public static void sort(int[] nums, int start, int end) { if (start >= end) { return; } int i = start, j = end; int key = nums[start原创 2017-04-01 19:02:43 · 261 阅读 · 0 评论 -
史上最简单清晰的红黑树讲解
查找(一)我们使用符号表这个词来描述一张抽象的表格,我们会将信息(值)存储在其中,然后按照指定的键来搜索并获取这些信息。键和值的具体意义取决于不同的应用。符号表中可能会保存很多键和很多信息,因此实现一张高效的符号表也是一项很有挑战性的任务。我们会用三种经典的数据类型来实现高效的符号表:二叉查找数、红黑树、散列表。二分查找转载 2017-11-06 20:16:50 · 560 阅读 · 0 评论 -
Java中的String为什么是不可变的
什么是不可变对象? 众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。区分对象和对象的引用 对于Java初学者, 对...转载 2018-03-22 09:48:59 · 240 阅读 · 0 评论 -
ThreadLocal阅读
ThreadLocal的实现是通过在线程内部保存了一个map结构,当前线程使用变量时,获取当前线程内部的map,达到了线程本地变量的目的,下面是对源码加了一些注释,有误请指正。package com.mr.study.threadlocal;import java.lang.ref.WeakReference;import java.util.Objects;import java.ut...原创 2019-08-04 13:38:51 · 181 阅读 · 0 评论 -
归并排序
public class MergeSort { //排序函数,排序思路,对一个数组排序,只需要把前半部分排序,后半部分排序,然后调用merge函数即可。 private static > void mergeSort(AnyType[] a,AnyType[] tmpArray,int left,int right){ if(left原创 2017-04-01 17:58:40 · 319 阅读 · 0 评论 -
堆排序
public class Heapsort { //找到左孩子 private static int leftChild(int i){ return 2*i+1; } private static > void percDown(AnyType[] a ,int i,int n){ int child;原创 2017-04-01 16:21:22 · 265 阅读 · 0 评论 -
希尔排序
希尔排序就是把原来的插入排序分成各种小组,小组类排序,然后小组的数量变少,再排序,知道小组的数量为1假设第一次排序的组数是数组长度的一般,第二次是1/4、、、如此,直到1public class Shellsort { public static > void shellsort(AnyType[] a){ int j; fo原创 2017-04-01 12:41:07 · 402 阅读 · 0 评论 -
TreeMap使用案例-多个映射(简单版)
题目,找出单词表中每个单词只有一个字母不同的所有单词(简单版,花费时间多)import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.TreeMap;public class WordMap { //如果一个单词具有minWords个或更多个通过1字母原创 2017-03-29 12:09:39 · 335 阅读 · 0 评论 -
TreeMap使用案例-多个映射(中级版)
细节问题请看简单版public class WordMapn { public static Map> computeAdjacentWords(List theWords){ Map> adjWords=new TreeMap //只要长度相等的单词才有可能满足条件,先按长度找出来,存在wordsByLength中原创 2017-03-29 12:32:45 · 249 阅读 · 0 评论 -
ArrayList简单实现Java版
public class MyArrayList implements Iterable{ private static final int DEFAULT_CAPACITY=10;//定义初始长度 private int theSize;//当前位置 private AnyType[] theItems; public MyArrayList(){原创 2017-03-22 18:06:26 · 272 阅读 · 0 评论 -
TreeMap使用案例-多个映射(高级版)
先按单词长度分,然后按共性把,相同类别的存在一起,然后,把其中的一个作为key,其他参数就为valueimport java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.TreeMap;public class WordMaps { public stat原创 2017-03-29 18:17:22 · 629 阅读 · 0 评论 -
LinkedList基本实现Java版
public class MyLinkedList implements Iterable{ private static class Node{ public AnyType data; public Node prex; public Node next; public Node(AnyType d,Node p原创 2017-03-23 13:14:14 · 203 阅读 · 0 评论 -
优先队列算法
public class BinaryHeap> { private static final int DEFAULT_CAPACITY=10; private int currentSize; private AnyType[] array; public BinaryHeap(){ currentSize=0; arr原创 2017-03-30 13:42:52 · 635 阅读 · 0 评论 -
插入排序
把当前元素插入到一个已经排序的数组中,从后往前找,如果插入数比当前数小的话,当前数就后移,否则,直接插入public class InsertSort { public static > AnyType[] insertionSort(AnyType[] a){ int j; for(int p=1;p原创 2017-03-31 12:07:23 · 227 阅读 · 0 评论 -
如何计算时间复杂度
时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数)比如:一般总运算次数表达式类似于这样:a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+fa ! =0时,时间复杂度就是O(2^n);a=0,bO(n^3);a,b=0,cO(n^2)依此类推eg:(1) for(i=1;i //循环了n*n次,当然是O(n^2) for(j转载 2017-03-31 12:29:22 · 365 阅读 · 0 评论 -
Stack的链表实现
public class Stack { //向上增长型 private LinkedList storage=new LinkedList(); public void push(T v){ storage.addFirst(v); } public T peek(){//只提供栈顶元素,不出栈 return原创 2017-03-24 17:49:58 · 446 阅读 · 0 评论 -
Stack简单实现向下增长数组版
格式和ArrayList类似,只是删除了一些不必要的方法。public class LowStack { private static final int DEFAULT_CAPACITY=10;//定义初始长度 private int theSize;//当前位置 private AnyType[] theItems; public LowStac原创 2017-03-24 17:52:24 · 283 阅读 · 0 评论 -
LinkedList实现队列简易版
public class MyQueue { LinkedList list=new LinkedList public void offer(T a){ list.add(a); } public T poll(){ T b=null; b=list.removeFirst(); re原创 2017-03-24 18:04:24 · 236 阅读 · 0 评论 -
另一种遍历Map的方式: Map.Entry 和 Map.entrySet()
今天看Think injava 的GUI这一章的时候,里面的TextArea这个例子在遍历Map时用到了Map.Entry 和 Map.entrySet(),记得只见过Map.KeySet()和values()这两个方法,于是到API中一看,Map.entrySet()这个方法返回的是一个SetMap.EntryK,V>>,Map.Entry是一个接口,他的用途是表示一个映射项(里面有Key和Va转载 2017-03-29 08:57:37 · 711 阅读 · 1 评论