javase-day4

ArrayList

含义

变成数组

常用方法

get
add
allAll
remove
set
isEmpty
size
contains
indexOf
lastIndexOf
clear
iterator

案列

public class ArrayListDemo {
	
	public static void main(String[] args) {
		
		//List
		   //Vector
		       //Stack
		   //ArrayList
		   //LinkedList
		
		
		//ctrl + shift + o 导入需要的,删除不需要的
		
		List list = new ArrayList();
		
		list.add("zs");
		list.add("ls");
		list.add("ww");
		
		//根据下标删除元素
		list.remove(0);
		//根据元素删除元素
		list.remove("ww");
		
		//[ls]
		System.out.println(list.size());
		
		//根据下标获取
		System.out.println(list.get(0));
		
		//TODO 为什么会报错,那如何处理
		//System.out.println(list.get(1));
		
	    //list.add("xiaoming");
	    //System.out.println(list);   //[ls,xiaoming]
	      
	     
		//插入
		list.add(0, "xiaoming");
		System.out.println(list);   //[xiaoming,ls]
		
		list.set(0, "xm");
		System.out.println(list);   //[xm,ls]
		
		//判断是否为空
		System.out.println(list.isEmpty());  //false
		
		System.out.println(list.contains("xm"));  //true


		list.add("xm");  //[xm,ls,xm]
		
		System.out.println(list);
		System.out.println(list.indexOf("xm"));
		System.out.println(list.lastIndexOf("xm"));
		
		list.clear();
		
		System.out.println(list);
		
		//方法 
		   //get
		   //add
		   //remove
		   //set
		   //isEmpty
		   //size
		   //contains
		   //indexOf
		   //lastIndexOf
		   //clear
		
		List data  = new ArrayList();
		data.add("11");
		data.add("22");
		data.add("33");
		 
		//遍历方式一
		for(int i=0;i<data.size();i++){
			System.out.println(data.get(i));
		}
		
		System.out.println("迭代器遍历");
		//遍历方式二
		Iterator iterator = data.iterator();
		
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
		
		//遍历方式三
		System.out.println("forEach遍历");
		
		for(Object temp:data){
			System.out.println(temp);
		}
		
		
		//另外一个方法
		
		List listData1 = new ArrayList(); //[11]
		listData1.add("11");
		
		
		List listData2 = new ArrayList(); //[22,33]
		listData2.add("22");
		listData2.add("33");
		
		
		//listData1.add(listData2);
		//System.out.println(listData1); //[11,[22,33]]
		
		listData1.addAll(listData2);
	    System.out.println(listData1); //[11,22,33]  
	}
}

Vecotor

含义

底层采用数组存储,api几乎和ArrayList的一样,但是Vector是线程安全的

案例

TODO

Stack

含义

先进先出的数据结构

案例

public class StackDemo {
	
	public static void main(String[] args) {
		
		Stack stack = new Stack();
		
		stack.push("one");
		stack.push("two");
		
		//pop 弹出栈顶元素且删除
		/*
		Object result = stack.pop();
		System.out.println(result);
		
		result = stack.pop();
		System.out.println(result);
		*/
		Object result = stack.peek();
		System.out.println(result);
		
		result = stack.peek();
		System.out.println(result);
	}
}

LinkedList

含义

链表数据结构

案例

public class LinkedListDemo {
	
	public static void main(String[] args) {
		
		List list = new LinkedList();
		 
		//分类
		   //单向链表
		       //Node有什么属性
		       //class Node{
		          //Object data;
		          //Node next;
		       //}
		
		   //双向向链表
	           //Node有什么属性
	           //class Node{
	              //Object data;
	              //Node pre;
		          //Node next;
	           //}
		  
		//比较 ArrayList LinkedList
		   //插入  
		     //LinkedList高
		     //ArrayList低
		
		   //删除
	          //LinkedList高
	          //ArrayList低
		
		   //修改
		      //跟查找差不多,因为需要查找到才能修改
		   //查找
		     //根据位置查找
                 //LinkedList低
                 //ArrayList高
		     //元素内容
		compareInsert();
	}
	
    //比较ArrayList和LinkedList插入的效率
	public static void compareInsert(){
		List arrayList = new ArrayList();
		
		//System.currentTimeMillis(); 
		long start = System.currentTimeMillis();
		for(int i=0;i<100000;i++){
			arrayList.add(0,i);
		}
		long end = System.currentTimeMillis();
		
		System.out.println(end-start);
		
		
        List linkedList = new LinkedList();
		
		//System.currentTimeMillis(); 
		start = System.currentTimeMillis();
		for(int i=0;i<100000;i++){
			linkedList.add(0, i);
		}
		end = System.currentTimeMillis();
		System.out.println(end-start);
	}
}

HashMap

含义

键值对形式,底层采用数据+链表存储结构

示例

TODO

Entry,EntrySet

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2opSzsKw-1658907026415)(assets/1625885883805.png)]

案列一

public class HashMapDemo {
	
	//Map
	   //HashMap
	   //TreeMap
	   //HashTable
	      //Properties
	
	//HashMap
	   //含义:本质采用的是数组+链表
	//key-value
	
	public static void main(String[] args) {
		
		Map data  = new HashMap();
		
		//常用方法
		    //put
		    //get
		
		
		data.put("name", "zhangsan");
		data.put("address", "guangdong");
		
		
		System.out.println(data.get("name")); //zhangsan
		
		System.out.println(data.isEmpty());   //false
		
		System.out.println(data.containsKey("name"));        //true
		System.out.println(data.containsValue("zhangsan"));  //true
		
		System.out.println(data.size());  //2
		
		//data.clear();
		
		//data.remove("name");
		
		data.replace("address", "guangxi");
		System.out.println(data);  //
		
		
		//如何遍历
		
		System.out.println("方式一");
		//先获取所有的key
		Set keyies = data.keySet();  //获取map中的所有key
		
		for(Object key : keyies){
			System.out.println(key+"="+data.get(key));
		}
		
		
		System.out.println("方式二");
		//方式二
		Set<Entry> entries = data.entrySet();
		for(Entry entry : entries){
			//entry包含key和value
			System.out.println(entry.getKey()+"="+entry.getValue());
		}
		
		//方式三
		System.out.println("方式三");
		Collection values = data.values();
		for(Object value : values){
			System.out.println(value);
		}
		
		//TODO 验证
		    //
	}
}

案例二

public class HashMapOtherDemo {
	
	public static void main(String[] args) {
		
		Map map = new HashMap();
		
		User oneUser = new User("zs");
		User twoUser = new User("zs");
		
		System.out.println(oneUser);
		System.out.println(twoUser);
		

		System.out.println(oneUser.equals(twoUser));
		//System.out.println(oneUser == twoUser);
		
	
		
		map.put(oneUser, "zhangsan"); 
		map.put(twoUser, "xxxxx"); 
		
		//hascode 一样
		System.out.println(map.size());
		
 		
	}

}

class User{
	
	private String name;
	public User(String name){
		this.name = name;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
}

TreeMap

含义

底层采用红黑树实现的一种平衡二叉树

平衡二叉树是排序树的一种优化

注意点

使用TreeMap的时候一定要提供一种比较机制,只有提供了比较机制才能判断当前节点应该作为左孩子还是右孩子。

可以使用如下方式之一

  • 第一种:可以构造TreeMap的时候提供比较机器
  • 第二种:元素实现Comparable接口

案例

public class TreeMapDemo {
	public static void main(String[] args) {
		
		//红黑树是平衡二叉树的一种实现
		          //含义:是排序树的一种优化
		                //注意点:一定要提供一种比较机制
		                            //节点实现比较器接口 ok
		                            //提供比较器
		        
		System.out.println("元素实现comparable接口方式");
		TreeMap treeMap = new TreeMap();
		Student zs = new Student("zs");
		Student ls = new Student("zs");
		
		treeMap.put(zs, "zs");
		treeMap.put(ls, "ls");
		System.out.println(treeMap);
		
		System.out.println("提供比较器方式");
		
		
		//匿名内部类
		TreeMap dataMap = new TreeMap(new Comparator() {

			@Override
			public int compare(Object o1, Object o2) {
				Teacher t1 = (Teacher) o1;
				Teacher t2 = (Teacher) o2;
				return t1.getName().compareTo(t2.getName());
			}
		});
		
		Teacher lw = new Teacher("laowang");
		Teacher ll = new Teacher("laoliu");
		
		dataMap.put(lw, "老王");
		dataMap.put(ll, "老刘");
		
		System.out.println(dataMap);
		 
		
		
	}

}

class Teacher {
	private String name;
	
	public Teacher(String name){
		this.name = name;
	}
	
	public String getName() {
		return name;
	}

	@Override
	public String toString() {
		return "Teacher [name=" + name + "]";
	}
}



class Student implements Comparable{
	private String name;
	
	public Student(String name){
		this.name = name;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + "]";
	}

	//写比较的规则
	     //如果是一样则返回0
	//-1 0 1
	@Override
	public int compareTo(Object o) {
		Student temp = (Student) o;
		
		return temp.name.compareTo(this.name);
	}
}

HashSet

含义

底层采用HashMap来存储,底层将value使用固定值来填充

案例

public class HashSetDemo {
	public static void main(String[] args) {
     //collection
		//set
		   //HashSet
		        //本质采用的是HashMap存储,只不过value是固定值
		
		HashSet hashSet = new HashSet();
		hashSet.add("one");
		hashSet.add("two");
		  
		System.out.println(hashSet);
		
		//遍历
		for(Object temp:hashSet){
			System.out.println(temp);
		}
		
		//迭代器 TODO 
		hashSet.iterator();
	}
}

TreeSet

含义

底层采用TreeMap来存储

案例

public class TreeSetDemo {
	
	public static void main(String[] args) {
		
		//底层采用TreeMap
		        //红黑树
		           //要求提供比较规则
		               //构造器中提供比较器
		               //元素实现Comparable接口
		TreeSet treeSet = new TreeSet();
	}
}

File

含义

一个File对象可以表示一个文件或者一个文件夹;通过file对象的api可以操作磁盘中的文件或文件夹

案例

 public class FileDemo {
	
	//File
	   //含义:一个File对象可以表示一个文件或者一个文件夹;通过file对象的api可以操作磁盘中的文件或文件夹
	
	public static void main(String[] args) {
		
		File file = new File("C:\\Users\\Administrator\\Desktop\\新建文本文档 (2).txt");
		
		
		System.out.println(file.getName());
		
		file.canRead();
		file.canWrite();
		file.canExecute();
		
		boolean sign = file.delete();
		System.out.println(sign);
		
		//创建文件夹
		
		file = new File("c:\\aa\\cc\\dd");
		//如果不存在则创建
		if(!file.exists()){
			//file.mkdir();  //创建文件夹
			
			file.mkdirs(); //创建多个文件夹
		}
		
		//判断是文件还是文件夹
		System.out.println(file.isFile());      //判断是否文件
		System.out.println(file.isDirectory()); //判断是文件夹
		
		//需求 
		String path = "D:\\work";
		
		System.out.println("-------------");
		displayFile(path);
	}
	
	
	public static void displayFile(String path){
		File file = new File(path);
		
		//罗列当前file对象直接下的文件或文件夹
		File children [] = file.listFiles();
		
		for(File temp : children){
			if(temp.isDirectory()){
				//文件夹,再进去
				displayFile(temp.getAbsolutePath());
			}else{
				//文件
				System.out.println(temp.getName());
			}
		}
	}
}

IO

含义

输入输出

分类

根据传输的单位

  • 字节流
  • 字符流

根据流向

  • 输入流
  • 输出流

字节流

含义

都是从InputStream或OutputStream派生的类

FileInputStream

public class FileInputStreamDemo {
	
	// FileInputStream
	//含义:从文件中按照一个一个字节方式读取数据到内存

	public static void main(String[] args) throws Exception {
 
		InputStream inputStream = new FileInputStream("C:\\a.txt");
 
		//读一个字节,如果返回-1代表全部读到最末尾了
		//int result = inputStream.read();
		//System.out.println(result);
		  
		 
		
		//读取全部内容
		/*
		int content=-1;
		while((content=inputStream.read())!=-1){
			System.out.println(content);
		}
		*/
		
	    
		byte [] cache = new byte[1024];
		int length=-1;
		
		//把读取到的字节放入cache这个缓存中,返回的是读取到了多个字节,如果-1代表读取到了末尾
		
		
		while((length = inputStream.read(cache))!=-1){
			String strData = new String(cache, 0, length);
			System.out.println(strData);
		}
		 
		//new String(byte [] data,int offset,int length)
		//代表将字节数组构造成字符串,offset代表从数组什么位置开始,length取多少个字节
	}
}

FileOutputStream

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值