JAVA第五周

鉴于异常拓展的日志记录

  1. log4j.properties(属性文件)在这里插入图片描述
import java.util.Scanner;

import org.apache.log4j.Logger;

public class Log4JDemo {
	
	//创建日志记录对象
	private static Logger logger = Logger.getLogger(Log4JDemo.class.getName());
	
	
	public static void main(String[] args) {
		// 记录开始
		logger.debug("####日志记录####");
		try {
			Scanner sc = new Scanner(System.in);
			logger.debug("请输入第一个数字:");
			System.out.println("第一个数字:");
			int i1 = sc.nextInt();
			logger.debug("第一个数字为"+i1);
			System.out.println("第二个数字:");
			logger.debug("请输入第二个数字:");
			int i2 = sc.nextInt();
			logger.debug("第二个数字为"+i2);
			logger.debug("开始计算:");
			int i3 = i1 / i2;
			logger.debug(i1+"/"+i2+"="+i3);
			System.out.println(i3);
		} catch (Exception e) {
			e.printStackTrace();
		}
		logger.debug("程序结束!");
	}
}

在这里插入图片描述
jbit.log

配置日志信息输出目的地(appender)
log4j.appender.appenderName = className

appenderName 自定义,在log4j.rootLogger中使用。

  • org.apache.log4j.ConsoleAppender(控制台)
  • org.apache.log4j.FileAppender(文件)
  • org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新文件)
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
配置日志信息的输出格式(Layout)
log4j.appender.appenderName.layout = className

className可设置如下

  • org.apache.log4j.HTMLLayout (以HTML表格形式布局)
  • org.apache.log4j.PatternLayout(可以灵活的指定布局模式)
  • org.apache.log4j.SimpLayout (包含日志信息的级别和信息字符串)
  • org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等等信息)

集合入门

以前能储存大量相同数据的容器只有数组,但是数组存在一个弊端,必须指定数组的容器,而且容量无法改变。因此学习ArrayList。

  • Enumeration (枚举:对集合迭代器接口)
  • vector (向量)
  • Stack (栈)
  • Hash table(哈希值)
  • Dictionary (字典)
  • Properties(属性表)
    从jdk1.2开始java中新增集合API,形成两种集合的解决方案:
  • 单列模式 ----> 顶层接口: Collection
  • 双列模式 ----> 顶层接口:Map

ArrayList适合做查询不适合做修改(查快改慢)

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ArrayListDemo2 {
	public static void main(String[] args) {
		List list = new ArrayList<>();
		添加.add参数Object类型
		list.add(new String("hello"));
		list.add(true);
		list.add(123);
		list.add('h');
		//向指定的位置插入元素
		list.add(1, "word");
		System.out.println("集合中是否包含指定元素"+list.contains("hello"));
		//替换指定位置的元素
		list.set(1, "softeem");
		//截取一个子集合(前包后不包)
		list = list.subList(2, 5);//2,3,4
		//将集合转换成数组对象
		Object[] objs = list.toArray();
		System.out.println(objs.length);
		//清空集合 
		list.clear();
		//判断集合是否为空
		System.out.println("集合是否为空"+list.isEmpty());
	}
}

LinkedList

LinkedList是基于双向链表的实现,在元素进行增删操作时,只需要修改链表的首尾指针即可轻松实现。(改快差慢)

import java.util.LinkedList;
public class Test {
	public static void main(String[] args) {
		LinkedList list = new LinkedList();
		list.add("rose");
		list.add("jack");
		list.add("bob");
		list.add("tom");
		list.add("jarry");
		list.add("bob");
		list.add(null);
		//这里的数值不是索引,表示的链表需要进行节点搜索的次数
		System.out.println(list.get(0));
		
		for (Object obj : list) {
			System.out.println("--->"+obj);
		}
		System.out.println(list.size());
		//向集合头部插入元素
		list.addFirst("123");
		//尾部插入元素
		list.addLast("456");
		System.out.println(list.getFirst()+"获取头部元素");
		System.out.println(list.getLast()+"获取尾部元素");
		//从头部弹出元素(将元素从集合中删除)
		System.out.println(list.pop());
		for (Object object : list) {
			System.out.print(object+" ");
		}
		System.out.println();
		//向集合中加入元素(等同于addFirst头部插入元素)
		list.push("123");
		/*
		 * 	ArrayList虽然表面没有重写Object的toString()方法,
		 * 	但是Arraylist继承了AbstractList继承了AbstractCollection中重写了toString()方法。
		 */
		System.out.println(list);
	}
}

Vector

Vectors的存在是基于动态数组(数组+数组拷贝)的集合实现,Vector是一个线程安全的集合实现(关键方法上都使用了synchronized修饰)。Vector在容量扩充时,增长为原理的2倍(ArrayList 是1.5倍);jdk1.2后Vector被改造为从List集合实现,因此Vector,ArrayList,LinkedList都是源自于List接口。

  • Vectors是老式的集合类,内部基于动态数组实现,容量扩充为原来的2倍,Vector是线程安全的实现。
  • ArrayList是JDK1.2之后新增的List集合的实现,内部也是基于动态数组实现,容量扩展为原来的1.5倍,ArrayList是线程不安全的实现(效率高),数据查询较快,修改较慢。
  • LinkedList是JDK1.2后新增的List集合的实现,内部是基于双向链表实现,也是线程不安全的实现,在进行数据修改方面比较快,数据查询较慢。

Iterator(迭代器)

iterator接口对集合进行快速遍历的接口,内部实现通常是由集合是类自身通过内部类的形式来完成。

Iterator it = list.iterator();
		while(it.hasNext()) {
			Object s = it.next();
			System.out.print(s+" ");
		}

ListIterator

ListIterator从Iterator实现而来,在Iterator的基础上扩充了一些方法

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class List2 {
	public static void main(String[] args) {
		List list = new ArrayList<>();
		list.add("helloword");
		list.add("jack");
		list.add("rose");
		list.add("lily");
		list.add("lucy");
		//获取当前集合的列表迭代器(可以方向迭代,添加,替换元素)
		ListIterator it = list.listIterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
		it.add("kebo");
		System.out.println("=============");
		//反向取出集合元素
		while(it.hasPrevious()) {
			System.out.println(it.previous());
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值