javase day18

实现Stack—继承Vector(底层原理)

package cn.tedu.stack;

import java.util.Arrays;
import java.util.EmptyStackException;

/**
*@author 作者:
*@version 创建时间:2020年10月21日下午10:02:28
*@description 描述:实现Stack---继承Vector(底层原理)
*/
public class StackDemox {
	public static void main(String[] args) {
		ListStack list=new ListStack();
		list.push("123");
		list.push("66");
		System.out.println(list);
	}
}
class ListStack{
	//存储数据的数组
	String[] data=new String[10];//默认长度为10
	//元素个数及下标
	int size=0;
	//判断栈是否为空
	public boolean empty() {
		//判断元素是否为0
		return size==0;
	}
	//获取栈顶元素并不删除----获取的就是数组的最后一个元素
	public String peek() {
		//判断元素是否为0
		if (size<1) {
			throw new EmptyStackException();
		}
		//把数组最后一个元素进行返回
		return data[size-1];
	}
	//获取栈顶元素并删除----获取数组的最后一个元素并删除
	public String pop() {
		//获取栈顶元素
		String str=peek();
		//删除数组最后一个元素----栈顶
		size--;
		//返回栈顶元素
		return str;
	}
	//入栈
	public void push(String str) {
		//判断是否需要扩容
		if (size>=data.length) {//不能指定数组初始长度
			data=Arrays.copyOf(data, data.length+data.length);
		}
		data[size++]=str;
	}
	//查找
	public int search(String str) {
		//遍历数组从后往前查找
		for (int i = size-1; i >=0;i--) {
			if(str==data[i]||str!=null&&str.equals(data[i])) {
				//返回新的下标值
				return size-i;
			}
			
		}
		//没有找到
		return -1;
	}
	public String toString() {
		//创建StringBuilder的对象
				StringBuilder sb=new StringBuilder("[");
				//拼接字符串数组中的元素
				for (int i = 0; i < size; i++) {//只遍历有元素的下标
					//拼接元素
					sb.append(data[i]).append(", ");
				}
				//转成字符串
				String s=sb.toString();
				//截取字符串,后面的不要了
				//判断size是否大于0
				if(size>0) {
					s=s.substring(0, s.length()-2);
					}
				/*String s="[";
				if(size!=0) {
				for (int i = 0; i < size; i++) {
					s+=data[i]+", ";
				}}*/
				
				
				return s+"]";
	}
}

集合中的上下限

package cn.tedu.typex;

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

/**
*@author 作者:
*@version 创建时间:2020年10月21日下午10:36:21
*@description 描述:
*/
public class TypeDemo3 {
	public static void main(String[] args) {
		//
		List<Integer> list1=new ArrayList<Integer>();
		list1.add(113);
		list1.add(3);
		list1.add(1);
		list1.add(1);
		list1.add(11);
		
		//
		List<Double> list2=new ArrayList<Double>();
		list2.add(1.2);
		list2.add(3.0);
		list2.add(6.3);
		list2.add(1.2);
		list2.add(1.1);
		//List<Number> list=new ArrayList<Number>();//泛型没有向上造型
		m(list1);
		m(list2);
		//m(new ArrayList<String>());//不是数字类型
	}
	
	
	//只遍历数字类型的集合
	//数字包装类的统一父类为Number
	//<? extends 类/接口>----可以传入的类型包括本类/本接口或者子类以及子接口
	//<? extends Number>----可以传入Number类型或者以及Number的子类
	//泛型的上限
	public static void m(List<? extends Number> list) {//所有元素的数据类型都可以接受
		for (Object object : list) {
			System.out.println(object);
		}
	}
	
	
	//泛型的下限
	//传入的类型的最小类型是String 
	//<? super 类/接口>-----传入的类型要么是本类/本接口或者父类及父接口
	//<? super String>
	public static void n(List<? super String> list) {//所有元素的数据类型都可以接受
		for (Object object : list) {
			System.out.println(object);
		}
	}
}


映射(Map<K,V>)

K键,V键 由键得到值(唯一),键不能重复,把这一对数据(键和值)统称为键值对,一个映射是由多个键值对组成的

为了方便操作键和值,就把键值对抽取成一个类-----Map.Entry,Entry对象是具体的键值对,一个映射可以有多个Entry对象组成的

遍历映射
1、根据键遍历映射
2、根据键值对获取对应的键和值

package cn.tedu.mapx;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
*@author 作者:
*@version 创建时间:2020年10月22日下午8:43:43
*@description 描述:映射
*/
public class MapDemo1 {
	public static void main(String[] args) {
		//创建映射对象
		Map<String, Integer> map=new HashMap<String, Integer>();
		//添加元素
		map.put("a", 1);
		map.put("b", 2);
		map.put("c", 3);
		map.put("d", 4);
		//重复键----覆盖
		//map.put("a", 6);
		//判断映射是否包含键
		//System.out.println(map.containsKey("c"));
		//判断映射是否包含值
		//System.out.println(map.containsValue(1));
		//把映射中的键值对(Entry对象)存放在set集合中进行返回
		//Set<Map.Entry<String, Integer>> s=map.entrySet();
		//根据键获取值-----键不存在返回null
		//System.out.println(map.get("a"));
		//返回的所有键存放在Set集合中
		//Set<String> set=map.keySet();
		//根据键删除键值对
		//map.remove("a");
		//删除键值对
		//同时满足才能删除
		map.remove("a", 2);
		//把映射的所有值存储到一个集合中进行返回
		Collection<Integer> c=map.values();
		
		//输出
		System.out.println(map);
	}
}

遍历映射

package cn.tedu.mapx;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
*@author 作者:
*@version 创建时间:2020年10月22日下午9:14:33
*@description 描述:
*/
public class MapDemo2 {
	public static void main(String[] args) {
				//创建映射对象
				Map<String, Integer> map=new HashMap<String, Integer>();
				//添加元素
				map.put("a", 1);
				map.put("b", 2);
				map.put("c", 3);
				map.put("d", 4);
				
				//获取映射中的所有键
				Set<String> set=map.keySet();
				//遍历键
				//1、增强for循环
				for (String string : set) {
					//由键获取指定值
					System.out.println(string+"="+map.get(string));
				}
	}
}

package cn.tedu.mapx;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
*@author 作者:
*@version 创建时间:2020年10月22日下午9:22:40
*@description 描述:
*/
public class MapDemo3 {
	public static void main(String[] args) {
		//创建映射对象
		Map<String, Integer> map=new HashMap<String, Integer>();
		//添加元素
		map.put("a", 1);
		map.put("b", 2);
		map.put("c", 3);
		map.put("d", 4);
		
		//2、获取所有的键值对
		Set<Map.Entry<String, Integer>> set=map.entrySet();
		//遍历所有的键值对
		for (Entry<String, Integer> entry : set) {
			//每个entry就是具体的entry对象就是具体的键值对
			System.out.println(entry.getKey()+"="+entry.getValue());
		}
	}
}

练习:
1、通过映射统计一个字符串中所有字符出现的次数

package cn.tedu.mapx;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

/**
*@author 作者:
*@version 创建时间:2020年10月24日下午11:45:27
*@description 描述:统计一个字符串中相同字符出现的次数
*/
public class MapText {
	public static void main(String[] args) {
		//字符串
		String str="wqefdsvsdqvhw";
		//创建映射对象---键代表字符  值---字符出现的次数
		Map<String, Integer> map=new HashMap<String, Integer>();
		//遍历字符串----把字符串中每个字符存入义工社之中
		for (int i = 0; i < str.length(); i++) {
			//获取到每个字符
			//判断要存入的字符是否已经包含了
			char c=str.charAt(i);
			if(map.containsKey(c+"")) {
				//获取上一次这个键对应的值再加1
				map.put(c+"", map.get(""+c)+1);
			}else {//第一次存入---不包含
				map.put(c+"", 1);
			}
		}
		//遍历映射
		for (Entry<String, Integer> entry : map.entrySet()) {
			System.out.println(entry.getKey()+"="+entry.getValue());
		}
	}
}

Map的实现类

1、HashMap
可以允许存储null值和null键,默认初始容量为16,默认扩容是增加一倍,如果指定初始容量,指定的值在2的n次到2的n次加1,那么底层真实的容量就是2的n次加1 异步式线程不安全的集合
2、HashTable
不允许存储null值和null键,默认初始容量是11,默认扩容是增加一倍再加一
11----22+1----46+1,如果指定初始容量底层真实的初始容量就是多少 同步式线程安全的集合

映射是结合? 不是 Java集合类框架(Java Collection Framwork)—集合、映射以及相关的操作类(Collection 、Collection、Map、数组、操作数组、Comparable接口、Iterrator接口……)

File类

File----代表文件或目录的类
练习:
1、删除文件(递归思想)
2、统计工作空间中有多少的.java文件和.class文件

package cn.tedu.file;

import java.io.File;
import java.io.IOException;

/**
*@author 作者:
*@version 创建时间:2020年10月23日下午9:43:06
*@description 描述:
*/
public class FileDemo {
	public static void main(String[] args) throws IOException {
		//创建File类对象
		//在创建对象的过程中不会去检测真实的路径
		//只是在根据给定的路径创建对象
		File file=new File("D:\\abb");
		//创建文件----空文件
		//boolean b=file.createNewFile();
		//创建目录---文件夹
		//不仅可以创建文件夹或者目录还可以创建多级目录
		//boolean b=file.mkdirs();
		//可以删除文件(有无内容),删除空目录
		//直接删除---不会放在回收站中(慎用)
		boolean b=file.delete();
		
		System.out.println(b);
	}
}

package cn.tedu.file;

import java.io.File;

/**
*@author 作者:
*@version 创建时间:2020年10月23日下午9:32:06
*@description 描述:初识IO
*/
public class FileDemo2 {
	public static void main(String[] args) {
		//创建文件类对象
		File file=new File("D:\\a");
		//获取当前目录下的所有文件以及文件夹的信息
		File[] fs=file.listFiles();
		//遍历数组
		for (File f : fs) {
			System.out.println(f);
		}
		//判断是否是文件
		System.out.println(file.isFile());
		//判断是否是文件夹----目录
		System.out.println(file.isDirectory());
	}
}

package cn.tedu.file;

import java.io.File;

/**
*@author 作者:
*@version 创建时间:2020年10月23日下午9:54:21
*@description 描述:
*/
public class FileText1 {
	public static void main(String[] args) {
		//创建对象
		File file=new File("D:\\a");
		//
		deleteFile(file);
	}
	//删除文件
	public static void deleteFile(File file) {
		
		if(file.isDirectory()) {
			File[] fs=file.listFiles();
			for (File f: fs) {
				deleteFile(f);
			}
		}
		//删除文件----删除空目录
		file.delete();
	}
}

public class FileDemo3 {
	public static void main(String[] args) {
		//创建文件类对象
		File file=new File("D:\\a\\b\\c");
		//返回目录或者文件的名称
		System.out.println(file.getName());
		//返回所在目录的路径
		System.out.println(file.getParent());
		//返回所在位置的路径以及名称
		System.out.println(file.getPath());
	}
}

public class FileDemo4 {
	public static void main(String[] args) {
		//创建文件类对象
		File file=new File("D:\\az.txt");
		/*
		 * //返回的是1970年1月1日到现在的毫秒值 //System.out.println(file.lastModified());
		 * file.setLastModified(324912L);
		 */
		//输出D盘下名称含有数字的文件或者文件夹
		/*
		 * File[] fs=file.listFiles(new FileFilter() { //匹配规则
		 * 
		 * @Override public boolean accept(File pathname) { // TODO Auto-generated
		 * method stub return pathname.getName().matches(".*\\d.*"); } });
		 */
		//lamda
		//File[] fs=file.listFiles(str->str.getName().matches(".*\\d.*"));
		//
		/*
		 * File[] fs=file.listFiles(new FilenameFilter() { //匹配规则
		 * 
		 * @Override public boolean accept(File dir, String name) {
		 * 
		 * return name.matches(".*\\d.*"); } });
		 */
		
		//
		//File[] fs=file.listFiles((dir,name)->name.matches(".*\\d.*"));
		//遍历数组
		/*
		 * for (File f : fs) { System.out.println(f); }
		 */
		//重命名----剪切(路径不一样)
		file.renameTo(new File("D:\\a\\az.txt"));//文件存储位置
	}
}

统计一个目录中.Java文件和.class文件的个数

package cn.tedu.file;

import java.io.File;

/**
*@author 作者:
*@version 创建时间:2020年10月25日上午11:40:22
*@description 描述:统计某一目录里.class文件和.java文件的个数
*/
public class FileText2 {
	//统计.java文件
	static int countJava;
	//统计.class文件
	static int countClass;
	public static void main(String[] args) {
		//
		File file=new File("D:\\yy2");
		countFile(file);
		System.out.println(".java文件个数:"+countJava+".class文件个数:"+countClass);
		
	}
	public static void countFile(File file) {
		//把当前文件信息调用出来
		File[] fs=file.listFiles();
		if(file.isDirectory()) {
			for (File f : fs) {
				countFile(f);
			}
		}else if(file.getName().endsWith(".java")) {
			countJava++;
		}else if(file.getName().endsWith(".class")) {
			countClass++;
		}
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值