美文网首页
第五篇学习总结

第五篇学习总结

作者: 拼搏男孩 | 来源:发表于2020-01-23 10:41 被阅读0次

第五篇学习总结

一、StringBuffer与StringBuilder

StringBuffer与StringBuilder是可变的字符串,对这两者的操作都是在对象本身进行改变而不是新创建一个对象。两者有一个区别,前者是先出来的,所以线程安全,效率低,后者是后出来的,所以线程不安全,效率高。

1、常用方法

  • public StringBuffer(String str) 根据指定字符串创建一个StringBuffer对象
  • public int length() 返回长度(字符数)
  • public StringBuffer append(String str) 将字符串添加到末尾
  • public StringBuffer insert(int offset,String str) 将字符串插入到指定位置,offset标识开始的下标
  • public StringBuffer deleteCharAt(int index) 删除指定位置的字符
  • public StringBuffer delete(int start,int end) 删除指定位置开始指定位置结束的字符串
  • public StringBuffer replace(int start,int end,String str) 字符串替换
  • public StringBuffer reverse() 字符串反转
  • public char charAt(int index) 返回指定位置的字符
  • public String substring(int start,int end) 取子串,包头不包尾
  • public String toString() 将StringBuffer转换为String

注:以上方法也适用于StringBuilder

二、基本数据类型的包装类

有时候需要把基本数据类型转换为类,这时就需要用到基本数据类型的包装类了,在Java中两者是自动转换的,称为自动装箱与自动拆箱。

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

从上面可以看出,基本数据类型的包装类大部分都是直接将首字母从小写变成大写,不过有两个例外,int与char。

包装类中有一个很重要的方法可以将字符串转换为对应的数据类型,以Integer为例,Integer.parseInt(String s)可以将字符串转换为基本数据类型int。当然,其他包装类也有相应的方法。

三、其他实用类

1、Random

这个类中有一些生成伪随机数的方法,生成一个a - b(包含a,不包含b的随机数) nextInt(b-a)+a;生成一个a - b(包含a,包含b的随机数) nextInt(b-a+1)+a;

Random random = new Random();
//用于生成伪随机数种子
random.setSeed(1234);
//产生一个0~n-1的随机数
random.nextInt(int n);

四、集合

1、数组与集合

数组的缺陷:长度固定,不够灵活,需要事先确定大小,不能扩展。但是数组不仅能够存储基本数据类型,还能存储引用数据类型。集合比较灵活,不用事先确定大小,但是集合只能存储引用数据类型,存储基本数据类型的时候会自动转换为包装类。

2、集合分类

集合可以分为Collection与Map,前者是单列集合,后者是双列集合,Collection中又可以分为List、Set、Queue。

2.1 Collection集合

Collection是单列集合,用于存储单个元素

常用方法:

  • boolean add(E e) 添加元素
  • boolean remove(Object o) 移除指定元素
  • boolean contains(Object o) 判断是否包含指定元素
  • int size() 获取集合中元素的个数
  • boolean addAll(Collection c) 将指定 collection 中的所有元素都添加到此 collection 中
  • boolean removeAll(Collection c) 移除此 collection 中那些也包含在指定 collection 中的所有元素
  • boolean containsAll(Collection c) 如果此 collection 包含指定 collection 中的所有元素
  • boolean retainAll(Collection c) 仅保留此 collection 中那些也包含在指定 collection 的元素

2.2 迭代器

Iterator<Student> it = student.iterator();
//调用next方法判断是否有下一个元素
while(it.hasNext()){
    //如果有,获取下一个元素,同时It指向下一个元素
    Student stu = it.next();
    System.out.println(stu);
}

使用迭代器遍历集合的时候,如果对集合进行了修改,下一次循环就会报错,因为迭代器保存的是集合的副本,如果迭代器发现集合副本和原集合修改次数不一样的话就会报错,这时可以使用迭代器的删除方法。

2.3 List集合

List集合是有序的,而且可以储存重复的数据,List集合可以分为三类:ArrayList、LinkedList与Vector,这三类各有各的特点,Vector已经不推荐使用了,因为效率较低。

  • ArrayList底层是数组,如果容量不够的话自动扩充,通过下标访问元素,在插入和删除元素的时候需要移动后面的元素,所以效率较低,在查找和修改元素的时候直接通过下标寻找,效率很高。常用方法有:get(int index) 通过下标查找元素 set(int index,E element) 修改指定下标的元素。

  • LinkedList底层使用的是链表,每一个节点只记录前后节点的位置,无法通过下标查询元素,只能依次遍历,所以效率较低,删除和插入的时候只需要修改前后节点接可以了,不用移动所有后面的元素,效率较高。

ArrayList,LinkedList及Vector集合之间的区别:

  • 线程安全:Vector是线程安全的,ArrayList和LinkedList线程不安全。
  • 实现方式:Vector与ArrayList底层使用的是数组,LinkedList底层使用的是链表。
  • 扩容:ArrayList和Vector使用数组实现,当数组长度不够时,会自动创建一个更大的数组,然后将值复制过去,LinkedList由于使用的是链表,所以不存在扩容的问题。
  • 速度:ArrayList查改快、增删慢,LinkedList查改慢,增删快。这里的增指的是插入,如果只是尾部添加,ArrayList更快。

2.4 Set集合

set集合存放的元素是无序的,而且不能存储重复的元素。根据存储元素的方式不同,可以分为HashSet与TreeSet。

2.4.1 HashSet

HashSet的底层仍然是数组,实际上使用了Map集合的key。通过Hash算法得出一个Hash值,比较是否有相同的,然后算出了一个下标值,然后判断这个下标值上是否有元素,如果有就挂载,本质上创建了一个比较大的数组,然后再放进去,Set集合为我们提供的操作比较少,只有三个方法:add、remove、size。不能遍历,没有查询方法。HashSet实际上是通过元素的hashCode和equals方法来判断的,如果没有重写,引用数据类型比较的是地址值,这是没有意义的。

2.4.2 LinkedHashSet

集合有序的HashSet,先插入的在前面,后插入的在后后面。

2.4.3 TreeSet

TreeSet是元素有序的,大的在右边,小的在左边,底层是一个二叉树。引用数据类型要比较大小必须自己提供比较大小的方法,一种方式是实现Comparable接口并且重写compareTo方法,另一种方式是在newy一个TreeSet的时候,提供一个匿名内部类,这个内部类实现了Comparator接口,重写compare方法。compare方法与compareTo方法如果返回负数,当前元素小于被比较元素,返回0相等,返回正数,当前元素大于被比较元素。

2.5 超级for

超级for是Iterator的简写形式,方便对数组和Collection集合的遍历。普通for循环可以删除元素,需要下标,迭代器可以删除,但是必须使用迭代器自身的remove方法,超级for不能删除。

3、Collections工具类的使用

Collections中有一些方法可以适用于所有Collection集合,下面所有方法都是静态的:

  • sort(List<T> list) 根据元素的自然顺序排序
  • swap(List<T> list,int i,int j)交换集合中两个下标位上的值
  • reverse(List<?> list)反转集合中的元素的顺序

相关文章

网友评论

      本文标题:第五篇学习总结

      本文链接:https://www.haomeiwen.com/subject/ebknzctx.html