java周总结1106

集合

变量:内存中的一个容器,可以存储一个值,会随着业务变化而变化
数组:内存中的一个容器,可以存储多个相同数据类型的值

数组有缺陷:1.长度固定,数组扩容并没有改变数组长度,仅仅是新建了一个数组;2.数组中存储的数据类型太过单一

集合是数组的升级版,也是内存中的一个容器
优点:可以自动扩容,同时还可以存储多种数据类型的数据
List和其子类(ArrayList,LinkedList)存储数据的特点:
有序的,可以重复

ArrayList中方法:

boolean        add(E e):将指定的元素追加到此列表的末尾

void    add(int index, E element):
在此列表中的指定位置插入指定元素

boolean        addAll(Collection<? extends E> c):
按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表末尾

boolean        addAll(int index, Collection<? extends E> c):
从指定位置开始将指定集合中所有元素插入此列表

void    clear():从列表删除所有元素

Object        clone():返回此ArrayList实例的拷贝

boolean        contains(Object o):
如果此列表包含指定元素,返回true

E    get(int index):
返回此列表指定位置的元素

int        indexOf(Object o):
返回此列表指定元素的第一次出现的索引,如果此列表不包含元素,返回-1;

Iterator<E>        iterator():
以正确的顺序返回该列表中的元素的迭代器

int        lastIndexOf(Object o):
返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1;

ArrayList集合的特点:底层使用可变数组,存储元素有序可重复
缺陷:查询快,增删慢

数组的长度,arr.length;集合的长度,list.size();
字符串长度,str.length();

LinkedList特点:底层是链表结构,由于是有头有尾的数据结构,所以有针对头尾设计的特有方法,新增删除元素效率较高

ArrayList和LinkedList比较
二者都是list接口的实现类,存储的元素都是有序可重复的
ArrayList底层维护的可变数组来存放元素,查询快,增删快
LinkedList底层采用的是链表结构,增删快,查询慢

Set集合存放数据的特点:无序,不可重复

HashSet集合如何保证元素不重复(唯一性)
当hashset存放元素是,会先调用对象的hashcode方法计算哈希值,遇到哈希值相同的元素,调用当前对象的equals方法,判断两个元素是否是同一个对象,返回true就不保存,返回flase当前对象保存

面试题:set集合可以使用传统for循环遍历吗?
set接口不存在get方法,没有list接口中通过索引取值的方法
list接口使用for循环通过get方法取出每个对象的方法遍历整个集合,set接口可以用foreach和迭代器可以对set集合实现遍历


map集合
存入:map.put(key,value);

删除:map.remove(Object key);根据指定的key删除key和value

修改:当存入相同key的键值对时,会比较value,不相同就用新value覆盖旧的value

获取:get(Object key);
根据指定key获取对应的value,若key不存在返回null

containsKey(Object key);判断map中是否包含指定key
containsValue(Object key):判断map中是否包含指定value

keySet();或取map中所有的key组成set集合
entrySet();获取map中所有的键值对组成set集合

map集合遍历的两种方法

1.keySet:

Map<E1,E2> m = new HashMap<E1,E2>();
Set<E1> set = m.keySet();
for(E1 s : set){
    System.out.println(s+"---"+s.get(s));
}


2.entrySet:

Map<E1,E2> m = new HashMap<E1,E2>();
Set<Entry<E1,E2>> entrys = m.entrySet();
for(Object obj : entrys){
    Entry<E1,E2> e = (Entry<E1,E2>)obj;
    System.out.println(e.getKey()+"---"+e.getValue());
}

枚举:

由一组固定的常量组成的类型

public enum enumname{
    enumbody1,
    enumbody2,
    enumbody3,
    ...
}


包装类:

java为每种基本数据类型分别设计了对应的类,称为包装类

集合在存储数据的时候,如果存储的是基本数据类型,会将基本数据类型转换成包装类之后再进行存储

描述基本数据类型和他对应的包装类型:
byte --- Byte
short --- Short
int --- Integer
long --- Long
double --- Double
float --- Float
char --- Character
boolean --- Boolean


装箱和拆箱:基本数据类型转为包装类称为装箱,包装类转为基本数据类型称为拆箱

装箱方式:valueOf方法;直接赋值;包装类的构造方法
1.Integer.valueOf(11);2.Integer i = 11;3.Integer i = new Integer(11);

拆箱方式:直接赋值;*Value()方法
1.int ii = i;2.int ii = i.intValue();


String

CharAt(int index);返回指定位置字符

indexOf(str):
查找字符或者子串第一次出现的位置,如果没有则返回-1,如果有则返回第一次出现的下标

Equals:两个字符串是否相同

equalsIgnoreCase(),忽略大小写比较

toUpperCase() 转换为大写
toLowerCase() 转换为小写

concat():字符串连接,和+一样

public String[] split(Stiring regex):
根据给定的表达式匹配拆分此字符串

subString(index);
从index下标处截取
subString(index1,index2);

Math类

floor(double a) --向下取整
ceil(double a) -- 向上取整
round(double a) -- +0.5向下取整
random()--随机数


IO 

File 类描述持久设备上的文件或者文件夹

File(String pathname)
常用方法:
exists();判断文件或者目录是否存在
isFile();判断是否是文件
isDirectory();判断是否是目录
getPath();获取文件的相对目录
getAbsolutePath();获取文件绝对目录
getName();返回此对象表示的文件或者目录名称
delete();删除此对象指定的文件或目录
createNewFile();创建名称的空文件,能创建文件夹
length();返回文件长度,单位是字节,若不存在返回0L

字节读取一个字节的模板代码

//先创建流对象和文件进行关联
FileInputStream fis = new FileInputStream("");
//定义变量,用来记录从底层文件中读到的那个字节数据
int ch = 0;
//定义循环开始从文件中读取数据
while((ch = fis.read()) != -1){
    //处理读取到的数据,数据存储在ch空间中
}
//关闭流对象
fis.close();

一次读取多个字节数据模板代码
//先创建流对象和文件进行关联
FileInputStream fis = new FileInputStream("");
//定义数组,用来存储从底层读取的多个字节数据,一般都是1024的整数倍
byte[] buf = new byte[1024];
//定义变量,用来记录到底从底层读了多少个字节数据
int len = 0;
//使用循环从底层开始读取
while((len = fis.read(buf)) != -1){
    //处理读取到的数据,数据存储在buf数组中,buf中共计存储了len个字节数据,
    //并不一定把buf存满
}
//关闭流对象
fis.close();
    

FileOutputStream:
它的构造方法:
FileOutputStream (File file);
FileOutputStream (String name);
这两种构造方法如果指定文件不存在会自动创建这个文件,若文件存在则会覆盖旧文件,旧文件数据会消失
FileOutputStream(String name ,boolean append);
当文件不存在会创建,当文件存在第二个参数表示是否追加,false表示不追加直接覆盖,true表示在原文件后追加

字符读取文件模板
字符输入流读取数据的模版代码:
  1、一次读取一个字符数据:
       //定义字符输入流对象和文件进行关联
       FileReader fr = new FileReader("文件");
       //定义变量,存储读取到的字符数据
       int ch = 0;
       //使用循环读取数据
       while( ( ch = fr.read() )!=-1 ){
           //处理读取到的单个字符数据,数据在ch中保存着
       }
       //关闭流对象
       fr.close();
   
 2、一次读取多个字符数据
       //定义字符输入流对象和文件进行关联
       FileReader fr = new FileReader("文件");
       //定义字符数组,用来存储一次读取到的多个字符数据
       char[] buf = new char[1024];
      //定义变量,记录每次读取到字符个数
      int len = 0;
      //使用循环读取数据
      while( ( len = fr.read( buf ) )!=-1 ){
          //处理读取到的数据,数据保存在buf中,buf中共计保存了len个字符数据
      }
      //关流
      fr.close();
    
    
Writer类常用方法
write(String str) : 写一个字符串
write(String str,int off,int len): 把cbuf中的字符数据从off开始,共计写len个
void close(): 关闭流
void flush() : 刷新
子类OutputStreamWriter常用的构造方法
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out, String charsetName)
FileWriter类是OutputStreamWriter的子类
FileWriter (File file)
FileWriter (String name)

注意:
用字符输出流写出数据的时候:
1、其实数据不是直接写到文件中,而是把字节数据存储在缓冲区中。如果这时字符输出流的缓冲区没有写满,或者我们没有调用flush方法,或没有关闭流对象,在程序结束之前,数据依然在缓冲区中,不会被写到文件中。所以要求,在关闭流之前一定要做刷新操作。
2、字符输出流(FileWriter)关联的文件如果不存在,会在指定的位置创建,如果文件存在,在创建流对象的时候,没有指定的true值,这时会创建新的文件覆盖原来的文件。

flush和close什么区别: 
  flush是把缓冲区的数据刷出到文件中,没有关闭流和文件之间的关联,在刷新之后,依然可以使用流对象继续给文件中写数据。
  close方法在关闭流之前会先调用flush把缓冲区中的数据写底层文件中,然后把流和文件的关联关系断开。
      一旦调用的close方法,流就已经被关闭了,就无法在使用当前这个流对象写数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值