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 ...
随机推荐
- 一个简单的以太坊合约让imtoken支持多签
熟悉比特币和以太坊的人应该都知道,在比特币中有2种类型的地址,1开头的是P2PKH,就是个人地址,3开头的是P2SH,一般是一个多签地址.所以在原生上比特币就支持多签.多签的一个优势就是可以多方对一笔 ...
- 类Objects
Object类是什么? 在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍 ...
- 制作自己cocoapods库
https://www.cnblogs.com/czc-wjm/p/5958103.html 今天来讲一下cocoapods制作,网上教程很多,就不再讲理论,直接操作: 1.创建仓库: 2.将仓库克隆 ...
- c++ _pFirstBlock == pHead
今天写程序时碰到了这个异常,导致调试的程序卡死.在网上找了很久答案,都没解决.大致判定是对象被多次析构,但又确认程序逻辑没有问题. 后来参考了 http://www.cnblogs.com/qinta ...
- css浮动学习
以前网页中的局都是使用浮动来实现的(毕竟ie9也不支持flex-box).而浮动在css中是一个挺难理解的概念,这次再巩固一下,float的具体使用事项. 1.行内元素和块元素的区别? 行内元素(im ...
- Oracle计算两天两个日期间相差的天数
Oracle计算两天两个日期间相差的天数: select to_date('19930411','yyyymmdd')-to_date('19890507','yyyymmdd') from dual ...
- Python——SQL——将查询的数据列表化
sql = 'select paihao from yang1.cailiaopai' data = datebase.shujuku.sj_select(sql) #将获得的数据进行列表化 data ...
- python一(字符串,字典)
list操作 name = ['小王','小米','小张','王强','张三','李四'] name.append('黄霑')#添加元素在最后一个 name.insert(,'王五')#指定下标插入元 ...
- python 多线程 ping
python 多线程 ping 多线程操作可按如下例子实现 #!/usr/bin/env python #encoding: utf8 import subprocess from threading ...
- bash中打印文件每一行及其行号
#!/bin/bash linenumber=$(cat remoteIP.cfg |wc -l) currentline= for ip in $(cat remoteIP.cfg) do curr ...