JAVA
PETERMAOSX
哎呦,不错哦!
展开
-
简单的单向循环链表实现
当只有一个节点的时候,这个节点的next指向自己。在添加节点的时候,让最后一个节点指向first。public class CircleLinkedPro { public static void main(String[] args) { Node node1 = new Node(1,"托尼","钢铁侠"); Node node2 = new Node(2,"彼得帕克","蜘蛛侠"); Node node3 = new Node(3,"斯蒂..原创 2020-09-18 12:38:12 · 267 阅读 · 0 评论 -
设计模式 -建造者模式
造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。主要有4个对象1 Builder (抽象建造者 => 工人模范)2 ConcreateBuilder (具体的建造者 => 招到的工人)3 Director (具体指挥者 => 监督的总管)4 Product (需要的产品)举个例子比如我要做牛肉汉...原创 2020-03-21 01:34:47 · 112 阅读 · 0 评论 -
单链表的反转 - 三指针版
当创建一个链表后,链表只知道自己的下一个节点,而不知道自己的上一个节点,为了能够让节点知道上一个节点,我们需要这样做。1、创建三个指针 一个是沿着原来的链表进行遍历,一个存储,一个用于交换2、进行将链表反向的工作比如: 原来链表 0 -> 1 -> 2 -> 3 -> 4…-> n ->NULL;用代码来表示就是 0.next = 1 1.next =...原创 2020-01-29 21:37:10 · 745 阅读 · 0 评论 -
最简单的桶排序
桶排序,顾名思义:将所需要排序的数放进一个桶里面去即可,这些桶是已经按大小排列好了的。只需要对桶进行遍历,并且将桶中所保存的数取出来。题目:用桶排序的方法打印出两种排序,分别是递增、递减两种序列。要求用户先输入数字的总量,然后输入对应的数字import java.util.Scanner;public class t01{ public static void main(Stri...原创 2019-12-23 15:32:35 · 147 阅读 · 0 评论 -
抽象类的使用方法(多态)
抽象类的使用就是在需要建立一个总的方法的时候做成抽象类好拓展一些。比如做游戏的时候,有Enemy.但是所有的Enemy都有整体的一个功能,比如说,走动,跑,攻击,idle…把这些方法都写在抽象类或者接口中的话。当不管是创建小兵还是Boss的时候都可以继承和实现在根据每个Emeny的不同而写出具有不同特性的方法package CAR_DEMO;public class test {...原创 2019-12-13 17:23:53 · 1407 阅读 · 0 评论 -
Java-顺序存储的线性表
顺序存储和链式存储各有各的优缺点。顺序存储主要是通过数组的来实现的,因为数组天生就带有顺序存储的一切特性。通过顺序存储形成的线性表主要是通过数组下标的变更来对元素进行变更。接口package shunxu_Pro;public interface ShunxuLink { void append(Integer item); //添加 int size(); //返...原创 2019-12-13 12:10:55 · 198 阅读 · 0 评论 -
Java,Python-有序链表
有序链表比起无序链表有一些优点1、元素都是拍好序了的2、在search的时候,如果说数据量过于庞大。那么提升的效果可以说是很大的。因为有序链表里面,如果你要找的数小于当前遍历到的节点的话。就可以断定后面一定没有你需要找的数了。就不用在像在无序链表里面那样得将所有的元素都遍历一遍才能够得到答案。class Node: def __init__(self,data): s...原创 2019-12-11 15:04:29 · 211 阅读 · 0 评论 -
求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。
接这个问题首先想到的方法是分治法,要求的是一串累加的数字。就需要一个变量来存储当前的总和,然后再依次计算。那么还有一个需要的变量就是如何让输入的数字有a aa aaa …这种格式。如果a=2 n=4的话,需要求的就是2 + 22 + 222 + 2222可以发现 2 = 010 + 2 22 = 210 + 2 222 = 22 * 10 + 2 2222=222*10+2有了这...原创 2019-11-30 16:53:35 · 4209 阅读 · 2 评论 -
设计模式-备忘录模式
备忘录模式备忘录模式简单来理解的话,其实就是我们在使用对象的时候,可能有时候会要声明一个临时变量来保存先状态的对象,当对象状态发生改变的时候,可以把原先保存在备忘录里面状态拿出来重新赋值给对象。一个Player对象,他的属性有血量值,魔法值,名字,位置这四个属性。当这个Player要去打Boss的时候,他要在Boss门口存一下档,存档这个事件就是调用了备忘录模式,将现在的状态保存一份。好了,...原创 2019-11-24 22:12:46 · 114 阅读 · 0 评论 -
设计模式-适配器模式
当你想使用一个已有的类,但是这个类的接口跟你的又不一样,不能直接拿来用,这个时候就需要适配器模式来帮忙了,其主要作用就是在旧的接口、新的接口之间完成适配。最简单的例子,就是当一个外国人和中国人交流的时候,如果双方都没有特别精通它国的语言的话,就需要一个翻译,这个翻译就是适配器。它即要懂中文,也要懂英语。package Demo1;public class AdapterDesignMod...原创 2019-11-23 17:48:34 · 133 阅读 · 0 评论 -
设计模式-状态模式
package Demo1;public class StateDesignModel { public static void main(String[] args) { Work work = new Work(); work.setHour(9); work.WriteProgram(); work.setHour(...原创 2019-11-22 14:34:06 · 109 阅读 · 0 评论 -
(C#.Java.Python) 类似于C++ STL的方法
C++的STL是一个非常好用的东东。用过了就回不去了,因为STL里面已经写好了数据结构,就算要自己自定义数据结构也是非常容易的。那么在使用其他语言的时候也想像使用STL一样潇洒,也是可以的。C++——STL_demo#include<iostream>#include<vector>#include<list>#include<map>#...原创 2019-11-20 20:43:46 · 660 阅读 · 0 评论 -
设计模式-建造者模式
构建起模式使用简单的对象并使用逐步方法构建复杂对象。这种类型的设计模式属于创建模式如果你需要将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示的意图,我们需要应用于一个设计模式,建造者模式,又叫生成器模式。建造者模式可以将一个产品的内部表象于产品的生成过程分割开来,从而可以是一个建造过程生成具有不同的内部表象的产品对象。如果我们用了建造者模式,那么用户就只需要指定需要建造的...原创 2019-11-18 21:47:33 · 157 阅读 · 0 评论 -
设计模式-桥梁模式
桥梁模式,桥梁模式将定义与实现分离。简单说就是比如说我想要定义一个函数。但是我定义这个函数之前我想到了有桥梁模式这个东东。我就先将函数的定义写在一个接口里面。然后再做我要使用这个函数的类来实现这个接口。就行了。测试代码package com.designDemo;import java.awt.*;public class BridgeModel { public stat...原创 2019-11-12 17:21:52 · 99 阅读 · 0 评论 -
设计模式-建造者模式
我自己理解的建造者模式,也就是BuiderModel。这个设计模式的使用方法是通过接口先来构建基类,然后实例化对象继承基类。再创建一个单个的Buider和一个和单例模式差不多的整合Buider类举个简单的例子:大家去肯德基点餐的时候都会有套餐,而每个套餐里面都会有几个单品,比如夏威夷菠萝鸡腿堡套餐(包含可乐和汉堡还要薯条)在这里面,每一个单品都是Buider套餐就是整合Buider的类基类就...原创 2019-11-07 17:40:01 · 88 阅读 · 0 评论 -
Android-通过ViewModel保存数据实现多页面的数据共享
通过ViewModel实现的数据共享符合Android的MVC设计模式,将数据独立出来实现的Demo1、主页面通过SeekBar 来改变数字的值2、点击进入就进入第二个界面,但是数据还是共享的3、随便加两个数字上去,再次切换4、发现数据还是共享的下面是具体实现步骤:1、建立两个Fragment(使用了Binding 和 Navigation)一点要添加Binding 和 N...原创 2019-11-04 21:17:28 · 9814 阅读 · 0 评论 -
Android-Fragment实现切换页面数据的传递
在开发app的时候,可能有时候需要将当前窗口中读入的数据传递到下一个窗口中去。解决这个需求的方法就是使用Bundle 来存储读入的数据,然后将bundle传入到下一个页面中去效果图点击切换后第一个HomeFragment代码package com.example.navgationdemo03;import android.os.Bundle;import android...原创 2019-10-28 17:03:52 · 1136 阅读 · 1 评论 -
Android-Fragment实现的多页面交互
使用Fragment来进行App开发做一个简单的页面切换效果效果如下1、先如图所示建立你所需要的fragment2、创建好之后设置一下布局XML代码如下<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/...原创 2019-10-27 18:28:57 · 776 阅读 · 0 评论 -
Android-实现关机后数据不会丢失
要实现关机后数据也不会丢失,需要使用到AndroidViewModel,SaveStateHandle 和 SharePreferences要达到的目的就是将数据保存成这个亚子就不会出现app在异常闪退或者关机后数据的丢失了数据类package com.example.applicationtest04;import android.app.Application;import ...原创 2019-10-27 13:27:53 · 1253 阅读 · 0 评论 -
算法思想-动态规划
通过把原问题分解成相对简单的子问题的方式求解复杂问题的方法性质:1、最优子结构:如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构的性质(既满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索2、重叠子问题:动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在...原创 2019-10-26 15:41:01 · 145 阅读 · 0 评论 -
Android-SharePreferences保存数据
使用SharePreferences 保存数据可以使得数据得到永久的保存首先看这里是没有文件的测试1直接在MainActivity中使用SharePreferencespackage com.example.savedataforever;import androidx.appcompat.app.AppCompatActivity;import android.content....原创 2019-10-25 22:27:42 · 516 阅读 · 0 评论 -
android-将程序Activity保留(防止被后台自动删除)
为了将程序的数据保留,防止程序在后台被后台自动销毁。可以使用SavedStateVMFactory来使得程序数据得到保留若要使用这种方法需要在build.gradle里面添加implementation ‘androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01’我这里使用了Binding来控制UI交互MainAct...原创 2019-10-21 18:34:15 · 1726 阅读 · 0 评论 -
Android-LiveData
LiveData 是将数据和UI分离。将数据独立到一个ViewModel里面ViewModelTest类定义了一个变量itempackage com.example.viewmodel02;import androidx.lifecycle.MutableLiveData;import androidx.lifecycle.ViewModel;public class ViewMo...原创 2019-10-20 13:11:49 · 206 阅读 · 0 评论 -
C#设计模式-策略模式
当一个问题需要的算法比较多,并且需要可能需要在不同的时候使用不同的算法。这个问题就可以使用策略模式来解决。策略模式的主要内容就是将不同的算法都封装成不同的类,然后通过一个类似于工厂的类来调用。c#实现有一个算法策略完全抽象类 strage下面的三个算法都是override 这个strage里面的方法再通过一个content类来组装最后再客户端中调用(main)using System...原创 2019-10-19 20:47:42 · 96 阅读 · 0 评论 -
Android-ViewModel 小Demo
viewModel 有点像是类的实例化Viewtest类package com.example.viewtest01;import androidx.lifecycle.ViewModel;public class Viewtest extends ViewModel { public int number = 0;}activitypackage com.examp...原创 2019-10-19 19:40:29 · 495 阅读 · 1 评论 -
Android-程序的本地化
程序的本地化就是将原本是英文环境下的程序,当系统语言设置为中文后程序里面的语言也自动切换为中文具体操作步骤如下1、打开strings文件2、打开Open editor3、点击小地球,并且选择自己的语言4、翻译测试效果系统语言改为中文后测试成功...原创 2019-10-19 18:38:17 · 345 阅读 · 0 评论 -
Android-UI控件的使用
在Android Studio中使用自带的控件来做一些Demo这个界面使用了TextView Button progressBar editText radioGroup seekBar ratingBar1、TextView就是文本显示框,可以显示一些自定义的文字2、Button按钮控件用来实现一些事件操作3、progressBar实现程序的加载动画4、editText文本编...原创 2019-10-19 18:05:51 · 397 阅读 · 0 评论 -
Java-HashMap通过value反向找key
在Java中,通过构建一个hashmap可以实现类似于python中字典的作用那么如果建立了一个哈希表,需要通过值来判断键,可以通过反向查找的方法来import java.util.HashMap;public class hashMaptest { public static void main(String[] args) { HashMap<Intege...原创 2019-10-14 17:43:21 · 2692 阅读 · 0 评论 -
java数据结构-二叉排序树(删除只有一个子节点的节点,删除有两个节点的节点)
在二叉排序搜索树中,要删除有子节点的节点的话。有两种情况第一种-要删除的节点有一个子节点:1、判断子节点是左节点还是右节点2、判断出来是左节点的话2.1、看看其父节点的左节点是不是我要删除的节点2.2、是的话就将其父节点的左节点设置为其左子节点2.3、如果不是左节点的话,就将其父节点的右节点设置为其左子节点3、如果是右子节点的话,同理。但是要注意将左右设置清楚第二种-要删除的节点...原创 2019-10-09 13:42:23 · 918 阅读 · 0 评论 -
Java数据结构-二叉排序树(搜索和删除叶子节点)
在二叉搜索树种搜索直接采用递归就可以做到删除叶子节点的话分3步1、找到要删除的节点2、找到要删除的节点的父节点3、删除节点(将其与父节点的联系断开)java实现树类package com.demo4;public class BinarySearchTree { Node root; public void add(Node node){ if(...原创 2019-10-08 22:31:41 · 639 阅读 · 0 评论 -
Java-网络编程InetAddress类的使用
java 网络编程中,可以使用InetAddress来获取目标网站的地址和本地的ipInetAddress类用于表示IP地址,比如在进行Socket编程时,就会用到该类。InetAddress没有公共构造方法,我们只能使用它提供的静态方法来构建一个InetAddress类实例#getLocalHost() : 返回本机主机地址#getAllByName(String host) : 从指...原创 2019-09-01 20:54:33 · 311 阅读 · 0 评论 -
Java数据结构-从二叉排序树到AVL树的建立(单旋转)
数据结构中二叉排序树是一个比较好的结构,但是其也有一个很大的缺点,就是如果你添加的数据是无序的,那么二叉排序树可以很好的降低复杂度。但是如果添加的数据是有序的,比如1,2,3,4,5,6,7…这类似的数据。那么二叉排序树会通过以二叉排序树的性质来添加节点。那么二叉排序树就会降低为链表,其实可能还比链表效率还低。所以就引入了AVL树(平衡排序二叉树)其实也就只是在原来的排序二叉排序树种添加了一个...原创 2019-10-09 20:29:17 · 196 阅读 · 0 评论 -
Java数据结构-AVL树的双旋转
在AVL树中,若添加的节点通过一次单旋转无法解决。那么就需要双旋转在左边的话,就先局部左后右在右边的话,就先局部右后左树package AVLTreeDemo;public class BinarySearchTree { Node root; public void add(Node node){ //如果是一颗空树 if(root...原创 2019-10-09 22:53:32 · 223 阅读 · 0 评论 -
Java数据结构-哈希表(散列表)
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(H...原创 2019-10-10 20:58:47 · 166 阅读 · 0 评论 -
Java数据结构-图+深度优先遍历
图是一种复杂的非线性结构。在线性结构中,数据元素之间满足唯一的线性关系,每个数据元素(除第一个和最后一个外)只有一个直接前趋和一个直接后继;在树形结构中,数据元素之间有着明显的层次关系,并且每个数据元素只与上一层中的一个元素(parent node)及下一层的多个元素(孩子节点)相关;而在图形结构中,节点之间的关系是任意的,图中任意两个数据元素之间都有可能相关。图G由两个集合V(顶点Ver...原创 2019-10-11 11:47:18 · 381 阅读 · 0 评论 -
Java数据结构-栈
感觉绕来绕去,还是绕不过数据结构这座大山啊。。。。开始再学习一次数据结构,使用JAVA来学一遍栈栈的基本结构就是后进先出使用java数组实现的package com.stu;public class myStack { int [] elements; public myStack(){ elements = new int[0]; } ...原创 2019-10-05 19:27:38 · 93 阅读 · 0 评论 -
Java python数据结构-二叉搜索树(创建,添加和遍历)
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉排序树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉排序树的存储结构。中序遍历二叉排序树可得到一...原创 2019-10-08 17:31:18 · 135 阅读 · 0 评论 -
java数据结构-赫夫曼树
给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路...原创 2019-10-07 19:59:24 · 196 阅读 · 0 评论 -
Java-设计模式(代理模式实现建房子)
代理模式为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。优点1、隐藏原始对象并控制对象的访问2、访问对象时提供其他的功能Subject:一个客户端可用的公开接口功能RealSubject:实现Subjectg接口的类,提供了接口方法的具体表现Proxy:实现Subject接口方法...原创 2019-09-04 15:19:30 · 281 阅读 · 0 评论 -
Java-设计模式(中介模式实现聊天室)
中介模式(Design pattern)定义了一个对象,该对象封装了一组对象的交互方式。对象之间的通信将封装在中介对象中。对象不再直接相互通信,而是通过中介进行通信。这减少了通信对象之间的依赖性,从而减少了耦合性。优点:1、避免一组交互对象之间的紧密耦合2、可以独立地改变一组对象之间的交互比如我们要实现一个聊天室的功能,聊天室就是中介,而聊天的人就是一个同事类,发送的每个消息都由聊天室转...原创 2019-09-04 00:21:53 · 902 阅读 · 0 评论