JAVA进阶20
1、可视化日历程序(简陋版)
package cn.zh.abstrac; import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner; public class TestCalendar {
public static void main(String[] args) throws ParseException {
System.out.println("请输入一个日期:(格式:yyyy-MM-dd)");
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(str);
Calendar c = new GregorianCalendar();
c.setTime(date); int day = c.get(Calendar.DAY_OF_MONTH);
int days = c.getActualMaximum(Calendar.DATE);
System.out.println("日\t一\t二\t三\t四\t五\t六"); c.set(Calendar.DAY_OF_MONTH, 1); for (int i = 0; i < c.get(Calendar.DAY_OF_WEEK) - 1; i++) {
System.out.print ("\t");
} for (int i = 1; i <= days; i++) {
if (day == c.get(Calendar.DAY_OF_MONTH)){
System.out.print(c.get(Calendar.DAY_OF_MONTH) + "*\t");
}else {
System.out.print(c.get(Calendar.DAY_OF_MONTH) + "\t");
} if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
System.out.println(); //换行
}
c.add(Calendar.DAY_OF_MONTH, 1);
}
}
}
运行结果图

2、使用递归打印目录树结构
package cn.zh.abstrac;
import java.io.File;
public class TestFile {
public static void main(String[] args) {
File f = new File("E:\\小程序");
printFile(f,0 );
}
static void printFile(File file,int level) {
//输出层次
for (int i = 0; i < level; i++) {
System.out.print("-");
}
System.out.println(file.getName());
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File temp : files) {
printFile(temp,level+1);
}
}
}
}
运行结果图

3、枚举的用法
package cn.zh.abstrac;
import java.util.Random;
public class TestEnum {
public static void main(String[] args) {
//枚举遍历
for (week k : week.values()) {
System.out.println(k);
}
//switch语句中使用枚举
int a = new Random().nextInt(4); //生成0,1,2,3的随机数
switch (Season.values()[a]) {
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天");
break;
case AUTUMN:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
}
}
}
enum Season{
SPRING,SUMMER,AUTUMN,WINTER
}
enum week{
星期一,星期二,星期三,星期四,星期五,星期六,星期日,
}
运行结果图

4、异常处理
package cn.zh.abstrac; import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException; public class TestA {
public static void main(String[] args) {
FileReader reader = null;
try {
reader = new FileReader("d:/a.txt");
System.out.println("111111111");
char c = (char)reader.read();
char c1 = (char)reader.read();
System.out.println(""+c+c1);
}catch (FileNotFoundException e){
System.out.println("2222222222222222");
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
System.out.println("333333333333333333");
try {
if(reader !=null){
reader.close();
}
}
catch (Exception e){
e.printStackTrace(); }
}
}
}
运行结果图

5、容器和数据结构
(1)简化版-手工实现ArrayList
package cn.zjc.mycollection;
public class SxtArrayList {
private Object[] elementDate;
private int size;
private static final int DEFALT_CAPACITY = 10;
public SxtArrayList() {
elementDate = new Object[DEFALT_CAPACITY];
}
public SxtArrayList(int capacity) {
elementDate = new Object[capacity];
}
public void add(Object obj) {
elementDate[size++] = obj;
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < size; i++) {
sb.append(elementDate[i]+",");
}
sb.setCharAt(sb.length()-1, ']');
return sb.toString();
}
public static void main(String[] args) {
SxtArrayList s1 = new SxtArrayList(20);
s1.add("aa");
s1.add("dd");
System.out.println(s1);
}
}
运行结果图

(2)数组的扩容操作
package cn.zjc.mycollection;
public class SxtArray01<E> {
private Object[] elementData;
private int size;
private static final int DEFALT_CAPACITY = 10;
public SxtArray01() {
elementData = new Object[DEFALT_CAPACITY];
}
public SxtArray01(int capacity) {
elementData = new Object[capacity];
}
public void add(E element) {
// 什么时候扩容
if (size == elementData.length) {
//怎么扩容(扩容操作)
Object[] newArray = new Object[elementData.length + (elementData.length >> 1)];
System.arraycopy(elementData, 0, newArray, 0, elementData.length);
elementData = newArray;
}
elementData[size++] = element;
}
public String toString() {
StringBuilder sb = new StringBuilder();
//[a,b,c]
sb.append("[");
for (int i = 0; i < size; i++) {
sb.append(elementData[i] + ",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}
public static void main(String[] args) {
SxtArray01 s1 = new SxtArray01(20);
for (int i = 0; i < 25; i++) {
s1.add("zh" + i);
}
System.out.println(s1);
}
}
运行结果图

(3)加get/set,索引不合法等
package cn.zjc.mycollection;
public class SxtArray01<E> {
private Object[] elementData;
private int size;
private static final int DEFALT_CAPACITY = 10;
public SxtArray01() {
elementData = new Object[DEFALT_CAPACITY];
}
public SxtArray01(int capacity) {
elementData = new Object[capacity];
}
public void add(E element) {
// 什么时候扩容
if (size == elementData.length) {
//怎么扩容(扩容操作)
Object[] newArray = new Object[elementData.length + (elementData.length >> 1)];
System.arraycopy(elementData, 0, newArray, 0, elementData.length);
elementData = newArray;
}
elementData[size++] = element;
}
public E get(int index){
checkRange(index);
return (E)elementData[index];
}
public void set(E element,int index){
checkRange(index);
elementData[index] = element;
}
public void checkRange(int index){
//索引合法判断[0,size)
if (index<0||index>size-1){
//不合法
throw new RuntimeException("索引不合法!"+index);
}
}
public String toString() {
StringBuilder sb = new StringBuilder();
//[a,b,c]
sb.append("[");
for (int i = 0; i < size; i++) {
sb.append(elementData[i] + ",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}
public static void main(String[] args) {
SxtArray01 s1 = new SxtArray01(20);
for (int i = 0; i < 25; i++) {
s1.add("zh" + i);
}
s1.set("AAAAA",10);
System.out.println(s1);
System.out.println(s1.get(26));
}
}
运行结果图

(4)链表的用法
package cn.zjc.mycollection;
public class Node {
Node previous; //上一个节点
Node next; //下一个节点
Object element; //元素数据
public Node(Node previous, Node next, Object element) {
this.previous = previous;
this.next = next;
this.element = element;
}
public Node(Object element) {
this.element = element;
}
}
Node
package cn.zjc.mycollection; /*
* 自定义一个链表
*/
public class SxtLinkedList01 { private Node first;
private Node last; private int size; //插入节点操作
public void add(int index, Object obj) {
Node newNode = new Node(obj);
Node temp = getNode(index); if (temp != null) {
Node up = temp.previous;
up.next = newNode;
newNode.previous = up; newNode.next = temp;
temp.previous = newNode;
} } //remove方法
public void remove(int index) {
Node temp = getNode(index); if (temp != null) {
Node up = temp.previous;
Node down = temp.next;
if (up != null) {
up.next = down;
}
if (down != null) {
down.previous = up;
}
//被删除的元素是第一个元素时
if (index == 0) {
first = down;
}
//被删除的元素是最后一个时
if (index == size - 1) {
last = up;
}
size--;
}
} //get方法,传递索引,返回对应的内容
public Object get(int index) {
if (index < 0 || index > size - 1) {
throw new RuntimeException("索引数字不合法:" + index);
} Node temp = getNode(index);
return temp != null ? temp.element : null;
} public Node getNode(int index) {
Node temp = null; if (index <= (size >> 1)) {
temp = first;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
} else {
temp = last;
for (int i = size - 1; i > index; i--) {
temp = temp.previous;
}
}
return temp;
} public void add(Object obj) {
Node node = new Node(obj); if (first == null) { first = node;
last = node;
} else {
node.previous = last;
node.next = null; last.next = node;
last = node;
}
size++;
} public String toString() {
Node temp = first;
while (temp != null) {
System.out.println(temp.element);
temp = temp.next;
}
return "";
} public static void main(String[] args) {
SxtLinkedList01 list = new SxtLinkedList01(); list.add("a");
list.add("d");
list.add("c");
list.add("1");
list.add("3");
list.add("A"); System.out.println(list);
System.out.println(list.get(2));
System.out.println("==============");
list.remove(1);
System.out.println(list);
System.out.println("==============");
list.add(2,"黄飞鸿");
System.out.println(list);
}
}
运行结果图

JAVA进阶20的更多相关文章
- Java 进阶 hello world! - 中级程序员之路
Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...
- Java线程间通信方式剖析——Java进阶(四)
原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...
- 当我们说线程安全时,到底在说什么——Java进阶系列(二)
原创文章,同步发自作者个人博客,转载请以超链接形式在文章开头处注明出处http://www.jasongj.com/java/thread_safe/ 多线程编程中的三个核心概念 原子性 这一点,跟数 ...
- 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)
本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...
- JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践
JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识 ...
- Java进阶(五十二)利用LOG4J生成服务日志
Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...
- Java进阶资料汇总
Java经过将近20年的发展壮大,框架体系已经丰满俱全:从前端到后台到数据库,从智能终端到大数据都能看到Java的身影,个人感觉做后台进要求越来越高,越来越难. 为什么现在Java程序员越来越难做,一 ...
- Java进阶2 数组内存和对象的内存管理知识
Java进阶2 数组内存和对象的内存管理知识 20131028 前言: 在面试的时候,如果是Java的编程语言,也许你认为没有什么可以问的,只能够说明你对于Java了解的太浅了,几乎就是两个星期的节奏 ...
- 7.19实习培训日志- java进阶
java进阶 java集合 Collection List ArrayList jdk1.2,异步处理,性能高,线程不安全 Vector jdk1.0,同步处理,性能低,线程安全 Set HashSe ...
随机推荐
- 一款回到顶部的 jQuery 插件,支持 Div 中的滚动条回到顶部
前言 今天在网上搜索“回到顶部”的 jQuery 插件,网上有很多,但是大部分都不支持让 Div 中的滚动条回到顶部.于是乎,不放弃,自己参考 Github 上的一个 jQuery 插件,经过自己的修 ...
- .NET、PHP、MySql、JS中的时间戳你每次是手写还是复制?这篇文章让你一次性搞懂
什么是时间戳(chuō)? 答:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. 为什么时间戳要从1970年01月0 ...
- vuex直接修改state 与 用dispatch/commit来修改state的差异
一. 使用vuex修改state时,有两种方式: 1.可以直接使用 this.$store.state.变量 = xxx; 2.this.$store.dispatch(actionType, pay ...
- vpshere6 ESXI 禁止登陆 "执行此操作的权限被拒绝"
vCenter在添加ESXI主机时,锁定模式选择“正常”,导致无法直接登陆ESXI宿主机,现象如下: 解决方法:
- asp.net 文件分片上传
最近在研究文件上传,里面的门道还是挺多的,网上大多数文章比较杂乱,代码都是片段,对于新手小白来说难度较高,所以在此详细写一下今天看到的一个demo,关于文件分片上传的. <!DOCTYPE ht ...
- Linux 安装多个版本JDK并设置默认版本
1 官网下载JDK版本 jdk-8u181-linux-x64.tar.gz 2 利用ssh工具上传安装包到Linux系统 传至:/usr/local 3 Linux用户安装的程序一般放在 /usr/ ...
- C# NetStream
标题:NetStream 关注点:Read.Write 正文: int size = Read(buf, 0, buf.length); 这里一次会读入length个字节,如果小于这个数量,后面的就是 ...
- MVC中使用Hangfire按秒执行任务
更新Hangfire版本到1.7.0,才支持使用按秒循环任务执行 RecurringJob.AddOrUpdate("test",()=>writeLog("每20 ...
- 手指向上滑动跳转页面的JQ方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- java篇 之 类型转化
类型转换时,如果最初的数值类型是有符号的,那么就执行符号扩展:如果它是char,那么不管将要被转换成什么类型,都执行零扩展 代码执行顺序是从上至下,从右至左 强制转换: Int a =(int)(sh ...