实训--day不晓得好多天

保持这两天的速度,争取明天看完Java基础

1:collection和collections的区别
1)collection:集合接口,提供了对集合对象进行基本操作的通用接口方法
               在Java类库中有很多具体的实现。
               意义就是为了各种具体的集合提供最大化的统一操作方式
   List --LinkedList
        --ArrayList
        --Vector
   Set  --TreeSet
        --HashSet
2)collections:包装类,包含各种有关集合操作的静态多态方法
                此类不能实例化,就像一个工具类,所以只能用类名.方法名调用
*常用方法:
a)collections.sort(集合):按自然顺序排序
b)collections.shuffle(集合):按随机顺序排序
c)collections.binarySearch(集合,元素):查找指定集合中的元素,返回查找的索引
d)collections.max(集合):通过自然顺序比较,返回集合的最大值
   collections.max(集合,比较器):按照自定义的比较器返回集合中的最大值
e)collections.indexOfSubList(集合,子集合):查找子集合在集合中首次出现的位置
f)collections.reverse(集合):反转集合中的元素
g)collections.rotate(集合,移动的距离m):集合中的元素向后移动m个位置,在后面被遮盖的元素循环到前面来

public class Test{
	public static void main(String [] args){
		List list=Array.asList("one two three four five six siven".split(" "));
		System.out.println(list);
		Collections.rotate(list,1);
		System.out.println(list);
	}
    }
运行结果:one two three four five six siven
              siven,one,two,three,four,five,six 

h)collections.copy(list1,list2):将集合2中的元素全部复制进集合1中,并且覆盖相应索引的元素

public class Test{
	public static void main(String [] args){
		List list1=Array.asList("one two three four five six siven".split(" "));
		System.out.println(list);
		List list2=Array.asList("我 是 复制的".split(" "));
		System.out.println(list2);
		Collections.copy(list1,list2);
		System.out.println(list1);
	}
    }
运行结果:one two three four five six siven
              我 是 复制的
              我,是,复制的,four,five,six,siven

i)collections.swap(集合,index1,index2):交换集合中指定索引的元素
j)collections.fill(集合,obj):将集合中的所有元素用obj替换


2:map:存储键值对的集合。一对一对的往里面存,而且要保证键的唯一性
*面试考过一个问题:map允许null键吗?Answer:hashTable不允许,hashMap允许
        |--HashTable:底层哈希表,不可以存入null作为键和值,该集合是线程同步的,效率低。jdk1.0以后出现的额
        |--HashMap:底层哈希表,允许存储null作为键和值,线程不同步,效率高。jdk1.2以后出现的
        |--TreeMap:底层二叉树,线程不同步,用于给集合中的键进行排序
*基本操作
1)添加:put(K key V value):如果添加的键是原来就存在的,后添加的值会覆盖之前的值,并且返回被覆盖的值
putAll(Map<? extends K,extends V>m)
2)删除:clear:
3)判断:containsValue(Object value)
containsKey(Object key)
isEmpty()
4)获取:get(Object key):可以通过这个方法来判断一个键是否存在,通过返回null来判断
         size()
values():获取map中所有值的集合
entrySet():获取map所有映射关系的集合
keySet():获取map所有键的集合
特别讲一下map的两种取出方式:
1)keySet():将所有的键存入到set集合中,使用set的迭代器迭代出所有的键,通过键获取值
2)entrySet():将集合的映射关系取出,存入到一个set集合中。
                 set集合的类型是Map.Entry

class MapDemo2
{
	public static void main(String []args)
	{
		Map<String ,String > map=new HashMap<String,String>();
		
		map.put("02","zhangsan2");
		map.put("03","zhangsan3");
		map.put("01","zhangsan1");
		map.put("04","zhangsan4");
		
		//取出键的集合
		Set keySet=map.keySet();
		Iterator it=keySet.iterator();
		while(it.hasNext()){
			String key=it.next();
			String value=map.get(key);

		//取出映射关系
		Set<Map.entry<String,String>> entrySet=map.entrySet();
		Iterator it=entrySet.iterator();
		while(it.hasNext()){
			Map.Entry<String,String> entry=it.next();
			String key=entry.getKey();
			String value=entry.getValue();
		}
	}
}
1:可变参数:jdk1.5以后出现的新特性
*其实就是一种数组参数的简写形式,不用每一次都手动的建立数组对象
 只要将操作的元素作为参数传递即可,隐式的将这些参数封装成数组
*注意事项:可变参数一定要定义在参数列表的最后


2:静态导入:当类名重名时,需要指定具体的包名
             当方法名重名时,需要指定所属对象或类


3:System:类中的方法和属性都是静态的
1)out:标准输出,默认是控制台
2)in:标准输入,默认是键盘
*描述系统的一些信息


io开始

1:date
eg:
//如果直接打印这个值,输出的格式只是一串数字,没有多大意义
Date d=new Date();
//所以我们使用一个格式类,定义我们自己的格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年M月dd日E hh:mm:ss");
//然后调用它的format方法将日期用我们定义的格式输出
String time=sdf.format(d);


2:math
Math.ceil():返回大于指定数据的最小整数
Math.floor():取整,返回小于指定数据的最大整数
Math.round():四舍五入
Math.pow():次方运算


3:io:用来处理设备之前的数据传输
       Java堆数据的操作都是通过流的方式
       Java操作流的对象都在io包中
1)字节流:InputStream  OutputStream
   字符流:Reader  Writer


字符流的由来:字符流的对象里面融合了编码表。
              我们可以自己想要存储的编码方式


FileInputStream:字节文件读取流
FileReader:字符文件读取流
*有read()方法,一次读取一个字节,有一个小细节,我不是很懂
 为什么直接在控制台打印的时候,就必须强转成char类型,否则输出的是数字编号
 但是直接用输出流写到文件中去的时候,却不需要强转,输出就直接是字符


FileOutputStream:字节文件输出流
FileWriter:字符文件输出流
*有write()方法,可以写字符串,字符数组,int型数据(在文件中会按照ASCII码表进行字符的转换)等。
 但是FileWriter的write方法,如果没有关流的话,必须手动刷新,不然数据还在缓冲区中
 指定文件的时候,还可以在后面跟一个布尔值,如果为真,可以在原文件数据的末尾添加数据,而不是覆盖




3:缓冲区:为了提高流的操作效率而出现的,所以创建缓冲区之前,必须有流对象的存在
           输出缓冲区提供了一个跨平台的换行符:newLine()
使用步骤:
1)创建io流对象
2)将需要提高效率的流对象传递给缓冲区的构造函数
3)操作缓冲区对象
4)使用缓冲区对象一定要刷新,因为缓冲区只有等缓冲区满了之后才会自动刷新。


*字符读取流缓冲区:提供了一个一次读一行的方法(readLine()),方便对文本数据的获取
                   当返回null时,表示读到了文件的末尾
                   *readLine方法只返回换行符之前的数据内容,并不会返回换行符('\r\n')
*带行号的缓冲区对象:即这个类有一个方法,可以在打印的时候打印出行号,并且可以自己设置行号的起始值

class LineBunberReaderDemo
{
	public static void main(String []args)
	{
		FileReader fr=new FileReader("PersonDemo.java");
		
		LineNumberReader lnr=new LineBunberReader(fr);
		
		String line=null;
		lnr.setLineNumber(100);
		while((line=lnr.readLine())!=null)
		{
			System.out.println(lnr.getLineNumber()+"..."+line);
		}
		lnr.close();
	}
}
4:转换流
*读取键盘录入:System.out:标准的输出设备
               System.out:标准的输入设备
1)当我们读取键盘录入的时候,想录入一行,做简单处理之后就打印一行。
   简单分析:其实就是读一行(readLine())的原理。
   但素:readLine()是BufferReader的方法。
         读取键盘录入的read()方法又是属于InputStream的。
   此时就想,有没有一种流,能把字节流转换成字符流呢?
   还真有,InputStreamReader


class ReadIn
{
	public static void main(String []args) throws IOException
	{
		/*
		//获取键盘录入对象
		InputStream in=System.in;
		
		//将字节流对象转换成字符流对象,使用转换流。InputStreamReader
		InputStreamReader isr=new InputStreamReader(in);
		
		//为了提高效率,将字符串进行缓冲区技术高效操作,使用BufferedReader
		BufferedReader bufr=new BufferedReader(isr);
		*/
		
		//键盘录入的最常见写法。等于前面三句话加起来,以后说到读取键盘录入,都直接写着一句
		BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
		
		/*
		OutputStreamReader out=System.out;
		OutputStreamReader osw=new OutputStreamReader(out);
		BufferedWriter bufw=new BufferedWriter(osw);
		*/
		BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
		
		
		String line=null;
		
		while((line=bufr.readLine())!=null)
		{
			if("over".equals(line))
				break;
			bufw.write(line.toUpperCase());
			bufw.newLine();
			bufw.flush();
			//System.out.println((line.toUpperCase()));
			
		}
		bufr.close();
	}
}

5:不知道叫啥
*流操作的基本规律,通过三个明确来完成。(因为流的体系非常复杂,所以最纠结的就是使用哪一个流对象)
1)明确源和目的:源:输入流 InputStream  Reader
                 目的:输出流 OutputStream  Writer
2)明确操作的数据是否是纯文本:是:字符流
                               不是:字节流
3)当体系明确后,再明确要使用哪个具体对象,通过设备来区分
   源设备:内存,硬盘,键盘
   目的设备:内存,硬盘,控制台


**想要把指定的数据按照指定的编码表(utf-8)存储到文本中。
目的:OutputStream  Writer 
是否纯文本:是,Writer
设备:键盘-->文件 ,使用FileWriter。但是FileWriter使用的默认编码方式,GBK
      要想在存储时加入指定的编码方式,只有转换流可以指定,所以要用到OutputStreamWriter
      OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");
需要提高效率吗?需要
                BufferedWriter bufw=new BufferedWriter(osw);
总而言之:转换流是字节和字符之间的桥梁,通常涉及到字符编码的指定时,就需要用到转换流




4:装饰设计模式:当想要对已有的对象进行功能的增强时,可以定义类,将已有对象传入,基于已有对象的功能,提供加强的功能
                 自定义的那个类就叫做装饰类
                 装饰类通常会通过构造方法接收被装饰的对象
                 并基于被装饰的对象的功能,提供更强的功能


*和继承的区别:装饰设计模式比继承体系灵活,避免了基继承体系的臃肿,降低了类于类之间的关系
               装饰类因为是增强已有对象,具备的功能和已有对象是相同的,只不过提供了更强的供
                所以装饰类和被装饰的类通常都是属于同一个体系中的

明天复习完基础部分,然后开始全面的框架学习,加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值