Java中级篇

目录

(一)数学类--MATH

(二)包装类--Boolean Byte Char Short Integer Long Float Double

(三)时间类--Date LocalDateTime Calendar

(四)字符串--String

(五)特殊字符串-StringBuilder StringBuffer

(六)大数类--BigDecimal DecimalFormat

(七)容器类--Collections

(八)集合类--List

(九)集合类--Set

(十)集合类--Map


(一)数学类--MATH

  • Math.abs() 获取绝对值
  • Math.max(vvalue1,value2) 获取其中最大值
  • Math.min(vvalue1,value2) 获取其中最小值
  • Math.pow(基数,幂指数) 求幂操作
  • Math.round() 四舍五入
  • Marh.sqrt() 开平方根

(二)包装类--Boolean Byte Char Short Integer Long Float Double

  • 自动打包与解包
  • Integer i = 12;
    int j = i;

  • 类型转换
Integer.parsetInt(String);
Double.parsetDouble(String);
Long.pasetLong(String);
 //获取指定字符 
String.chatAt()

(三)时间类--Date LocalDateTime Calendar

  • Data(时间)
Date time = new Date();
 //周三 四月 17日 时间 中国标准 2019年
 //Wed Apr 17 16:42:42 CST 2019
time.getYear()+1900 
time.getMonth()+1 
time.getDate() 
time.getHours() 
time.getMinutes() 
time.getSeconds() 
//时间戳 起点1970.1.1.0.0.0
time.getTime()
  • Calendar(日历)
Calendar time = Calendar.getInstance();
time.get(Calendar.YEAR);
time.get(Calendar.MONTH)+1;
time.get(Calendar.DATE);
time.get(Calendar.HOUR_OF_DAY);
time.get(Calendar.MINUTE); 
time.get(Calendar.SECOND);
time.set(Calendar.DATE,time.get(Calendar.DATE)+1)
time.setTime(new Time());
  • SimpleDateFormat(时间格式化)
SimpleDateFormat util = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = util.format(new Date());
Date time = util.parse(String);
  • 计算时间差
String time1 = "2021-01-01 12:00:00";
String time2 = "2021-01-02 12:00:00";
SimpleDateFormat util = new SimpleDateFormat();
Date date1 = util.paras(time1); Date date2 = util.paras(time2);
long diff = Math.abs(data1-date2); long secends = diff/1000; long minutes = secends/60; long hours = minutes/60; long minMore = mintes%60;

(四)字符串--String

  • charAt() 返回指定位置字符,start为0
  • concat() 字符串拼接,字符串无法改变

String concat = "初始".concat("拼接");

  • contain() 指定字符串是否在内
  • endsWith() 是否以指定字符串结尾
  • startsWith() 是否以指定字符串开头
  • equalsIgnoreCase() 忽略大小写是否相等
  • indexOf() 指定字符位置
  • matches() 正则表达式
  • replace() 子串替换

String replace = "初始替换".replace("替换","拼接");

  • split() 指定位置切割
  • substring(start,end) 字符串截取

(五)特殊字符串-StringBuilder StringBuffer

StringBuilder(可变不生成新对象)

StringBuilder str1 = new StringBuilder();
str1.append("d"); 
str1.insert(2,"d");
String str = str1.toStrng();

(六)大数类--BigDecimal DecimalFormat

DecimalFormat util = new DecimalFormat(".##");
String value = util.format(new Double(1/3));

(七)容器类--Collections

  • 集合总体结构,临时性的数据存储
-Collection(Interface) extend Iterable //容器
 -List(Interface) //允许重复,记录顺序
     -ArrayList(implements Class) //数组
         -LinkedList(implements Class) //链表
     -Vector(implements Class) //向量
     -Stack(implements Class) //栈
 -Set(Interface) //不允许重复,不记录顺序
     -HashSet(implements Class) //哈希算法表
         -LinkedHashSet(implements Class) //哈希链表
     -SortedSet(Interface) //可排序集合
         -NaviqableSet(Interface) //范围查询集合
     -TreeSet(implements Class) //红黑树
 -Queue(Interface) //单向队列
     -Deque(Interface) //双向队列
         -ArrayDeque(implements Class) //数组结构队列
     -LinkedList(implements Class) //单双向队列
-Map(Interface) //映射,key不可重复,value不可重复
     -HashMap(implements Class) //哈希映射,无序
         -LinkedHashMap(implements Class) //哈希链表映射
         -SortedMap(Interface) //可排序映射
         -NaviqableMap(Interface) //范围映射
     -TreeMap(implements Class) //红黑树映射,有序
     -HashTable(implements Class) //哈希表
         -Pjiaroperties(implements Class) //字符串键值映射
  • 集合线程安全(加锁)

-Vector

-ArrayDeque

-HashTable

  • 集合常用方法
//可存放Object下的任意对象 
list.remove();
list.add(); 
list.contains(); 
list.size(); 
list.isEmpty(); 
list.clear(); 
list.addAll(Collection c); 
list.containsAll(); 
list.removeAll();
  • 集合迭代器
Iterator it = list.iterator();
//判断是否含有下个元素
iterator.hasNext();
//指针前移动并取值
iterator.next();
  • 集合增加for
for(Object temp:list){
 //底层为迭代器
}

(八)集合类--List

  • ArrayList 可存放空值,线程不安全,效率高(增删效率低,要经过数组扩容,改查的效率较高)
    • -底层下维护了一个elmentData的Object[]数组
    • -底层无参构造器的长度初始为0,第一次为10,之后为1.5倍扩容
    • -底层有参构造器的长度增长扩容为1.5倍
    • -transient修饰为短暂,不会被序列化
    • -计算完长度后使用Arrays,copy()拷贝后返回
  • LinkedList 双向链表,线程不安全。底层添加逻辑如下(增删效率高,只经过节点追加,改查的效率较低)
    • -fist设为空
    • -定义里面含有节点,first和last村相互指向对象
    • -每个节点含有内部类和数据,next,before
    • -默认删除第一个节点
    • -将首节点指向的指针设为空
  • Vector 与ArrayList相似,线程安全(synchronized),效率低
    • -底层无参默认为10,溢出按两倍扩容
    • 底层还是对象数组

(九)集合类--Set

  • HashSet 可含有一个空值,无序的,数据无法重复,存放取出的顺序不一致。没有序无法get,但取的顺序是一样的。

-底层是HashMap,采用的是Hash算法

-add()调用put方法,key为存储对象的哈希值,value为Object占位

-hash(key),求对象的hashcode不完全是

-table,HashMap的属性,初始1

-为空时第一次扩容为16,计算位置赋值

(十)集合类--Map

  • HashMap 键值型数据,保存映射相关的数据,又称双列元素,key不允许重复,本质是哈希表,key值冲突会被替换。(key一个为空,value不做要求,为一对一映射,实现的是Entry接口)
map.put(Object key,Object value);
map.get(Object key); 
map.remove(Object key); 
map.containsKey(); 
map.containsValue(); 
map.size(); 
map.isEmpty(); 
map.clear();

-静态内部类Node,包含hash,key,value,next

static class Node<K,V> implements Map.Entry<K,V>{ 
    final int hash;
    final K key;
    V value; Node<K,V> next;
 }

-为了方便同时建立EntrySet集合,元素为Entry,里面包含key和value

transient Set<Map,Entry<K,V>> entrySet; 
//此时set元素就是Node的实现类 
HashMap map = new HashMap();
//这不就可以遍历了,此时指向还是Node节点
Set set = map.entrySet();
for(Object obj : set){
    Map.Entry entry = (Map.Entry)obj;
    entry.getKey();
    entry.getValue();
 }

-Map的键和值遍历方法

Set keyset = map.keySet();
Iterator util = keyset.iterator();
//遍历键
for(Object key:keyset){} 
while(uitl.hasNext()){ 
    Object key = util.next();
} 
//遍历值 
Collection values = map.getValues();
Iterator util = values.iterator();
for(Object value:values){} 
while(uitl.hasNext()){
    Object value = util.next(); 
}
  • HashMap的扩容机制

-在哈希冲突时,建立链表,存在next中

-先填满,在散列,在成数

-散列,取模同一位置形成单向链表,长度到8,碰撞后二次哈希

-满了,数组扩容,扩容到64,将Node数组进行树化

-0->16(12)->32(24)->64(48),默认16

  • 哈希表的链表树化成红黑树有 两个条件:

- 链表长度大于TREEIFY_THRESHOLD(8)

- 哈希数组的长度大于MIN_TREEIFY_CAPACIT(64)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值