Day16

一、笔记

Set集合(重点)

基本概念

java.util.Set接口是Collection接口的子接口,与List接口平级。

该接口中的元素没有放入次序,并且不允许重复。

该接口的主要实现类:HashSet类 和 TreeSet类。

其中HashSet类的底层是采用哈希表来实现数据内容的管理。

其中TreeSet类的底层是采用有序二叉树来实现数据内容的管理。

 HashSet 和hashCode方法的关系

HashSet Set接口的实现类,通过Hash表的方式实现;在 将对象加入HashSet 集合中时,需要获取对象的HashCode值通过Hash算法索引到对应的存储空间。

HashSet的元素存放规则

向HashSet中放元素的次序:   

1 先调用元素的hashCode(),得到哈西码,通过算法元素在     哈西表中的位置。    

2 如果该位置为Null,没有元素,直接放入即可。    

3 如果该位置不是Null,有元素,调用元素的equals()方法,          比较是不是同一个元素。    

4 如果是同一个元素,保留旧的元素,丢弃新的。    

5 如果不是同一个元素,放入该位置的链表中下一个元素。

TreeSet – 可排序的Set

• 很多时候,需要对集合中的元素按照某种规则进行排序。排序不是放入次序。 

• SortedSet 就是可排序的Set,实现类就是TreeSet。

• 必须实现Comparable接口,实现其中方法,才能被排序(自然排序)。       

• 自然排序只能按一种规则排序,比较器可以多元化排序。

Comparable接口

针对对象数组或者集合中的元素进行排序时,首先需要确 定对象元素的“比较”逻辑(即哪个大,哪个小)。

JDK中定义了Comparable接口,用于表示对象间的大小关 系,JAVA类可以通过实现Comparable接口编写对象的大小逻辑

 

Comparable接口中定义有compareTo 方法,其逻辑是:

• 返回 正数表示this大于参数对象;

• 返回负数表示this小于参数对象;

• 返回0表示this等于参数对象

TreeSet类

(1)什么是二叉树?

   二叉树就是指最多有两个分叉的树形结构,换句话说,二叉树是指每个节点最多只有两个子节点的树形结构。

 

(2)什么是有序二叉树?

   满足以下3个条件的二叉树叫做有序二叉树:

       a.左子树中的任意节点元素值都小于根节点;

       b.右子树中的任意节点元素值都大于根节点;

       c.左子树和右子树的内部也要遵循上述规则;

 

(3)使用方式

   当放入元素到TreeSet对象时,需要指定元素之间比较大小的规则,具体方式如下:

    元素的自然排序进行处理,让元素类型实现java.lang.Comparable<T>接口;

      Map集合

基本概念

   java.util.Map<K,V>接口主要用于描述单对元素的集合,具体要求如下:

       K - 此映射所维护的键的类型

       V - 映射值的类型

   该集合中要求key不允许重复,每个key对应一个value。

   该集合的主要实现类:HashMap类 

常用的方法

V put(K key, V value) - 用于将参数指定key和参数指定的value组成一对放入当前集合

         - 若当前集合中不存在key,则表示增加的功能,返回null。

         - 若当前集合中存在key,则表示修改的功能,返回之前的旧值。

V get(Object key)

         - 用于根据参数指定的key返回对应的value,若key不存在则返回null。

V remove(Object key)

         - 用于根据参数指定的key来删除该对元素,返回被删除元素的value。

IO流:Input  Output  输入、输出流

对于数据的操作而言,流化分为:字节流  InputStream   OutputStream  


想操作文件:FileOutputStream  FileInputStream

集合:只能用来存储一堆对象的容器


集合框架:

Collection(集合)|--List(有序的,数据可以重复):ArrayList(列表式)  LinkedList(链表式) Stack(LIFO) Vector
        |--Set(无序的,数据具有唯一性):HashSet  TreeSet

 

方法:add  remove/clear set  get/size add..


集合遍历:
for循环
forEach循环
迭代器:类似于娃娃机的爪子,用来从容器中抓数据
hasNext():相当于一个指针,在指针移动前会判断集合中有无元素,有返回true,没有返回false
next():取出集合中的元素

二、Demo

1.

package com.sihuo.zhuguangyi.collection_iterator;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class TestIterator {

	
	public static void main(String[] args) {
		ArrayList arr  = new ArrayList();
		arr.add("你好3");
		arr.add("你好2");
		arr.add("你好4");
		arr.add("你好6");
		arr.add("你好5");
		arr.add("你好1");
		
//		Iterator  itr = arr.iterator();
//		while(itr.hasNext()) {
//			Object s=itr.next();
//			if(s.equals("你好2")) {
				itr.remove();
				arr.remove(0);//ConcurrentModificationException 并发修改异常
//			}else {
//				System.out.println(s);
//			}
//		}
		ListIterator listItr = arr.listIterator();
		/*
		 * 将指针移动到集合底部
		 */
		while(listItr.hasNext()) {
			System.out.println(listItr.next());
		}
		System.out.println("*******************************");
		/*
		 * 反向遍历
		 */
		while(listItr.hasPrevious()) {
			System.out.println(listItr.previous());
		}
		
		
		
		
		
		
		
	}
}

2.

package com.sihuo.zhuguangyi.collection_map;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.qfedu.tom.collection_set.Student;

public class TestHashMap {

	public static void main(String[] args) {
		
		
		HashMap<Integer,String> hm = new HashMap<Integer,String>();
		//增加
		/*
		 *  HashMap中的key值是以Set集合的形式存储的,无序,数据唯一
		 *  value值可以看作是以List集合的形式存储的,数据可以重复
		 *  理解:可以理解为,key值相当于是value值的下角标,只不过是给下角标起了个名字而已
		 */
		hm.put(8, "班长的老婆");
		hm.put(9, "俊俊的老婆");
		hm.put(6, "班长的老婆");
		hm.put(7, "班长的老婆");
		hm.put(4, "班长的老婆");
		hm.put(5, "班长的老婆");
		
//		System.out.println(hm);
		//删
//		hm.clear();
//		hm.remove("班长");
//		System.out.println(hm);
		
		//查
//		System.out.println(hm.size());
//		System.out.println(hm.get("班长"));
		
		
		Set  set = hm.keySet();//将key值存放到Set集合中
//		for (Object object : set) {
//			System.out.println(object+"="+hm.get(object));
//		}
		
		Iterator itr = set.iterator();
		while(itr.hasNext()) {
			Object o =itr.next();
			System.out.println(o+"========>>"+hm.get(o));
		}
	}
}

3.

package io.oi;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class TestFileOutputStream {

	public static void main(String[] args) throws Exception {
								//文件路径
		FileOutputStream fos   = new FileOutputStream("E:\\a.txt");
		byte[]  b = new byte[] {97,98,99,100,101};
		fos.write(b);
		fos.write("Hello World".getBytes());
		
		FileInputStream  fis = new FileInputStream("E:\\a.txt");
		
		System.out.print((char)fis.read());
		System.out.print((char)fis.read());
		System.out.print((char)fis.read());
		System.out.print((char)fis.read());
		System.out.print((char)fis.read());
		System.out.print((char)fis.read());
		
		
		
	}
}

永远成功的秘密,就是每天淘汰自己!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值