Java基础
无意呢
进击的程序猿
展开
-
实现三 Java多媒体与多线程处理
Java多线程处理例子编写一个Java 多线程程序,完成三个售票窗口同时出售20张票(如下图所示);程序分析:1.票数要使用同一个静态值; 2.为保证不会出现卖出同一个票,要 Java 多线程同步锁。设计思路:1.创建一个站台类Station,继承Thread或者实现 Runnable 接口,重写run方法,在run方法里面执行售票操作!售票要使...原创 2018-10-22 22:07:13 · 433 阅读 · 0 评论 -
Java基础知识复习(十一)-- HashMap之查找内容性能比较
准备一个ArrayList其中存放3000000(三百万个)String对象,其名称是随机的,格式是string-[4位随机数]string-3229string-6232hero-9365 …因为总数很大,所以几乎每种都有重复,把名字叫做 string-5555的所有对象找出来 要求使用两种办法来寻找不使用HashMap,直接使用for循环找出来,并统计花费的时间借助HashM...原创 2019-01-01 21:24:39 · 384 阅读 · 0 评论 -
【数据结构】两个有序数组的交集的java实现
题目:给定两个有序整型数组array_1和array_2,数组的元素是递增的,且数组中没有重复的元素,计算array_1和array_2的交集。常规解法:二路归并//求两个有序数组的交集 static int getIntersection(int array_1[],int len1,int array_2[],int len2,List<Integer> c) { ...原创 2019-01-17 21:10:23 · 2330 阅读 · 0 评论 -
【数据结构】判断数组中的元素是否连续的java实现
题目:现有一个整数数组元素是0~65535之间的任意数字,已知相同数字不会重复出现,而0可以重复出现,且0可以通配任意一个数字,设计一个算法判断该数组是否连续。注意:1)数组中的数据可以乱序2)0可以出现多次题目分析:如果一个包含n个数据的数组是连续的,那么最大值和最小值之差一定0为n-1;如果包含0的话,那么最大值和最小值之差不能超过n-1。package dataStruc...原创 2019-01-17 21:41:38 · 2250 阅读 · 0 评论 -
【数据结构】判断数组中是否有重复元素的java实现
题目:给定一个长度为N的数组,其中每个元素的取值范围都是1~N,判断数组中是否有重复的数字问题分析:1.最简单暴力的方法是用双层嵌套对每两个数字进行比较,看是否相等但是时间复杂度太高,不予采用。2.也可以先排好序,然后遍历数组,y进行相邻元素的比较,同意时间复杂度太高,不予采用。3.也可以开辟一个新数组,用来记录原数组中每个元素出现的次数,但增大了空间开销。4.假如数组中没有重复...原创 2019-01-17 22:02:24 · 7185 阅读 · 4 评论 -
【查找算法(一)】二分查找(折半查找)及其应用
二分查找二分查找是一种比较高效的查找算法,它利用分治的算法思想将较大的问题规模缩小为较小规模的问题,从而大大减少了查找次数,因此二分查找应用十分广泛。适用条件顺序结构有序算法描述找到中间值与查找目标值比较中间值大于目标值,则high = mid + 1,继续在比较中间值小的序列中查找;中间值小于目标值,则low = mid - 1,继续在比较中间值大的序列中查找;...原创 2019-02-11 20:50:51 · 618 阅读 · 0 评论 -
【查找算法(二)】插值查找的Java实现
插值查找在介绍插值查找之前,首先考虑一个新问题,为什么二分查找算法一定要是折半,而不是折四分之一或者折更多呢? 打个比方,在英文字典里面查“apple”,你下意识翻开字典是翻前面的书页还是后面的书页呢?如果再让你查“zoo”,你又怎么查?很显然,这里你绝对不会是从中间开始查起,而是有一定目的的往前或往后翻。 同样的,比如要在取值范围1 ~ 10000 之间 100 个元素从小到大均匀分...原创 2019-02-12 17:54:23 · 699 阅读 · 1 评论 -
HashMap原理分析总结
1.HashMap的工作原理HashMap是基于hashing的原理,我们使用put(key,value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,先对Key调用hashCode方法,来计算hash值,返回的hash值用来找bucket对象,来放entry键值对。在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现...转载 2019-03-16 23:26:43 · 166 阅读 · 0 评论 -
Java8—新的日期和时间API的入门使用
传统的处理接口设计并不是很友好,不易使用。终于,Java 8 借鉴第三方优秀开源库 Joda-time,重新设计了一套 API,这里记录一下自己的学习过程package dateandtime;import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoFie...原创 2019-06-19 15:05:54 · 173 阅读 · 0 评论 -
Java 多线程 与 线程池
文章目录1. Java 中线程的生命周期2. 创建 Java 线程的三种方法3. 实现接口 VS 继承 Thread4. Runable 和 Callable 的比较5. 使用线程池5.1 Executors, Executor and ExecutorService5.2 实例化线程池1. Executors 类的工厂方法2. 直接创建线程池5.3 向线程池提交任务1. execute()2. ...原创 2019-06-20 15:31:21 · 160 阅读 · 0 评论 -
详解 ExecutorService 接口及其实现类 ThreadPoolExecutor
文章目录1. ExecutorService 接口简介2. ThreadPoolExecutor2.1 对各个参数的解读2.2 任务队列的四种类型2.3 饱和(拒绝)策略的四种类型3. newFixedThreadPool4. newSingThreadExecutor5. newCachedThreadPool1. ExecutorService 接口简介Executor 框架中有两个关键类...原创 2019-06-20 15:33:31 · 2357 阅读 · 0 评论 -
Java8新特性之Lambda,Stream,Optional
前言Java 8是Java自Java 5(发布于2004年)之后的最重要的版本。这个版本包含语言、编译器、库、工具和JVM等方面的十多个新特性。1. Lambda表达式1.1 何为Lamdba表达式Lambda表达式理解为简洁地表示可传递的一种表达式:它没有名称,但有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。最简单的Lambda表达式可由逗号分隔的参数列表、->...原创 2019-06-16 21:25:57 · 488 阅读 · 0 评论 -
Java IO 入门
文章目录1. 几个 IO 概念1.1 流1.2 类 InputStream, OutputStream, Reader 和 Writer2. Java IO:文件2.1 通过 Java IO 读文件2.2 通过 Java IO 写文件2.3 通过 Java IO 随机存取文件2.4 文件和目录信息的获取Java 的 IO 包主要关注的是从原始数据源的读取以及输出原始数据到目标媒介。以下是最典型的...原创 2019-06-20 22:24:14 · 213 阅读 · 0 评论 -
实现自己的收集器以获得更好的性能
将质数按质数与非质数分区package streams;import java.util.List;import java.util.function.Predicate;import java.util.stream.IntStream;public class PrimeNumber { public static boolean isPrime1(int num) {...原创 2019-06-17 12:14:44 · 157 阅读 · 0 评论 -
学习 Fork / Join框架
分支/合并框架的目的是以递归的形式将可以并行执行的任务拆分成更小的任务,然后将每一个任务的结果合并起来生成整体的结果,它是ExecutorService接口的一个实现,它把子任务分配给线程池(称为ForkJoinPool)中的工作线程。1. 运行流程2. 工作窃取算法工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。工作窃取的运行流程图如下:那么为什么需...原创 2019-07-09 10:19:16 · 141 阅读 · 0 评论 -
Java基础知识复习(十)-- 二叉树排序
二叉树二叉树由各种节点组成二叉树特点:每个节点都可以有左子节点,右子节点每一个节点都有一个值二叉树排序假设通过二叉树对如下10个随机数进行排序67,7,30,73,10,0,78,81,10,74排序的第一个步骤是把数据插入到该二叉树中,插入基本逻辑是,小、相同的放左边,大的放右边67 放在根节点7 比 67小,放在67的左节点30 比67 小,找到67的左节点7,3...原创 2019-01-01 16:39:02 · 145 阅读 · 0 评论 -
Java基础知识复习(九) -- 删除ArrayList中的数据
首先初始化一个Hero集合,里面放100个String对象,名称分别是从str 0str 1str 2…str 99.通过遍历的手段,删除掉名字编号是8的倍数的对象若最简单的使用位置查找的方式来删除对应对象会发现,若每次查找并删除,后面的对象会自动前移参考代码1package review5;import java.util.ArrayList;public clas...原创 2018-12-31 21:28:16 · 1959 阅读 · 0 评论 -
Java基础知识复习(八)-- 遍历ArrayList的三种方法
第一种遍历 普通for循环可以用size()和get()分别得到大小,和获取指定位置的元素,结合for循环就可以遍历出ArrayList的内容第二种遍历,使用迭代器从最开始的位置判断"下一个"位置是否有数据,如果有就通过next取出来,并且把指针向下移动,直到"下一个"位置没有数据第三种,增强型for循环用增强型for循环使用增强型for循环可以非常方便的遍历ArrayLis...原创 2018-12-31 20:42:47 · 469 阅读 · 5 评论 -
Java基础知识复习(一)
一、算术操作符1.练习-求和: 要求: 使用Scanner从控制台获取两个数字,然后计算这两个数字的和import java.util.Scanner;public class Test1 { public static void main(String[] args) { Scanner s = new Scanner(System.in...原创 2018-12-02 15:25:08 · 491 阅读 · 0 评论 -
Java基础知识复习(二)--流程控制
1.练习-黄金分割点寻找某两个数相除,其结果 离黄金分割点 0.618最近 分母和分子不能同时为偶数 分母和分子 取值范围在[1-20]package review2;public class Test1 { public static void main(String[] args) { //黄金分割点 float breakPoint = 0.618f; i...原创 2018-12-02 17:58:20 · 235 阅读 · 0 评论 -
Java基础知识复习(三)--数组
1.冒泡法排序冒泡法排序的思路:第一步:从第一位开始,把相邻两位进行比较,如果发现前面的比后面的大,就把大的数据交换在后面,循环比较完毕后, 最后一位就是最大的 第二步: 再来一次,只不过不用比较最后一位以此类推package review3;public class Test2 { public static void main(St...原创 2018-12-02 18:50:57 · 401 阅读 · 0 评论 -
Java基础知识复习(四)-- 对二维数组排序+求质数的个数
1.练习-二维数组排序首先定义一个5X8的二维数组,然后使用随机数填充满。借助Arrays的方法对二维数组进行排序。参考思路:先把二维数组使用System.arraycopy进行数组复制到一个一维数组然后使用sort进行排序最后再复制回到二维数组。package review3;import java.util.Arrays;import java.util.Random;...原创 2018-12-04 22:57:07 · 403 阅读 · 0 评论 -
写一个程序来模拟网桥功能。
一、实验内容模拟实现网桥的转发功能,以从文件中读取帧模拟网桥从网络中收到一帧,即从两个文件中读入一系列帧,从第一个文件中读入一帧然后从第二个文件中再读入一帧,如此下去。对每一帧,显示网桥是否会转发。要求:Windows或Linux环境下运行,程序应在单机上运行。分析:用程序模拟网桥功能,可以假定用两个文件分别代表两个网段上的网络帧数据。而两个文件中的数据应具有帧的特征,即有目的...原创 2018-12-27 11:46:56 · 6132 阅读 · 4 评论 -
编写一个计算机程序用来计算一个文件的16位校验和
题目编写一个计算机程序用来计算一个文件的16位校验和。最快速的方法是用一个32位的整数来存放这个和。记住要处理进位(例如,超过16位的那些位),把它们加到校验和中。*原理:把要发送的数据看成16比特的二进制整数序列,并计算他们的和。若数据字节长度为奇数,则在数据尾部补一个字节的0以凑成偶数。例子:16位校验和计算,下图表明一个小的字符串的16位效验和的计算。为了计算校验和,发...原创 2018-12-27 11:55:21 · 5357 阅读 · 0 评论 -
Java基础知识复习(十二)-- 手写一个简单版的HashMap
一、自定义字符串的hashcode如下是Java API提供的String的hashcode生成办法;s[0]*31^(n-1) + s[1]*31^(n-2) + … + s[n-1], s[0] 表示第一位字符,n表示字符串的长度。本练习并不是要求去理解这个算法,而是自定义一个简单的hashcode算法,计算任意字符串的hashcode,因为String类不能被重写,所以我们通过一个静...原创 2019-01-03 16:58:46 · 355 阅读 · 0 评论 -
Java基础知识复习(十三)-- 自定义顺序的TreeSet
默认情况下,TreeSet中的数据是从小到大排序的,不过TreeSet的构造方法支持传入一个Comparator public TreeSet(Comparator comparator) ,通过这个构造方法创建一个TreeSet,使得其中的的数字是倒排序的参考代码package stack;public class Hero { private String name;...原创 2019-01-03 19:49:00 · 216 阅读 · 0 评论 -
Java基础知识复习(十四)-- 集合的聚合操作
Stream和管道的概念要了解聚合操作,首先要建立Stream和管道的概念,Stream 和Collection结构化的数据不一样,Stream是一系列的元素,就像是生产线上的罐头一样,一串串的出来。管道指的是一系列的聚合操作。管道又分3个部分管道源:源是一个List中间操作: 每个中间操作,又会返回一个Stream,比如.filter()又返回一个Stream,中间操作是“懒”操...原创 2019-01-03 21:08:09 · 712 阅读 · 0 评论 -
Java基础知识复习(十五)-- 集合工具类 Collections
1.首先初始化一个List长度是10,值是0-9。然后利用Java 集合工具类 Collections不断的打乱顺序,直到前3位出现3 1 4,shuffle 1000,000 次,统计出现的概率2.猴子排序:不断打乱顺序,直到出现正序为止,统计其出现的概率参考代码package review5;import java.util.ArrayList;import java.util...原创 2019-01-03 21:15:30 · 260 阅读 · 0 评论 -
Java基础知识复习(五)-- 字节流 && 字符流
InputStream字节输入流 ,OutputStream字节输出流 ,用于以字节的形式读取和写入数据所有的数据存放在计算机中都是以数字的形式存放的。 所以字母就需要转换为数字才能够存放。比如A就对应的数字65,a对应的数字97. 不同的字母和符号对应不同的数字,就是一张码表。ASCII是这样的一种码表。 只包含简单的英文字母,符号,数字等等。参考代码package test;...原创 2018-12-30 11:40:27 · 171 阅读 · 0 评论 -
设计一个按照优先级调度算法实现处理机调度的程序
设计一个按照优先级调度算法实现处理机调度的程序一、优先级调度算法实现处理机调度的程序设计提示如下:( 1 ) 假设系统有n个进程,每个进程用一个进程控制块(PCB)来代表。进程控制块的格式如下表所示,且参数意义也相同。进程的优先数、到达时间和估计运行时间由用户程序任意设定,且优先数越低,优先级越高。调度时,总是选择优先级最高的进程运行。(2)为了调度方便,设计一个指针指向就绪队列的第一个...原创 2018-12-30 12:18:46 · 18206 阅读 · 2 评论 -
Java基础知识复习(六)-- 简单加密文件
1.题目加密算法:数字:如果不是9的数字,在原来的基础上加1,比如5变成6, 3变成4,如果是9的数字,变成0字母字符:如果是非z字符,向右移动一个,比如d变成e, G变成H,如果是z,z->a, Z-A,字符需要保留大小写非字母字符比如’,&^ 保留不变,中文也保留不变2.实现思路1.先在f1中写入内容2.查ASCII码表3.然后实现encondeFil...原创 2018-12-30 14:50:09 · 500 阅读 · 0 评论 -
Java基础知识复习(七)-- 中文编码问题
一、练习-数字对应的中文找出 E5 B1 8C 这3个十六进制对应UTF-8编码的汉字参考代码1 // 找出 E5 B1 8C 这3个十六进制对应UTF-8编码的汉字 byte[] bs = new byte[3]; bs[0] = (byte) 0xE5; bs[1] = (byte) 0xB1; bs[2] = (byte) 0x8C; String str ...原创 2018-12-30 17:57:54 · 595 阅读 · 0 评论 -
生产者与消费者模式
所谓生产者与消费者模式就是通过平衡生产线程与消费线程的工作能力来提高程序整体处理数据的速度…在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完才能继续生产数据,反之亦然,为了解决这种生产消费能力不均衡的问题,便有了生产者消费者模式。下面先从一个简单的例子入手:package multithread;...原创 2019-07-09 17:13:18 · 730 阅读 · 0 评论