目录
(二)包装类--Boolean Byte Char Short Integer Long Float Double
(三)时间类--Date LocalDateTime Calendar
(五)特殊字符串-StringBuilder StringBuffer
(六)大数类--BigDecimal DecimalFormat
(一)数学类--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)