三、JAVA核心技术部分 -- softwbc 发布于:2017年12月20日 浏览量:557  |

0、java源码结构分析
【tools.jar 编译;dt.jar 运行环境】
rt.jar是java的基础类库(java doc中包含的所有类的class文件);

java:java核心包;javax:java扩展包;其中lang包中的类不需要import就可以使用,其他包使用时都需要先导入。
1、applet:创建applet小程序的类;
2、awt:创建图形、图像、用户界面程序的类;Graphics2D,Color,Font等
3、beans:开发java beans用到的类;PropertyEditor,对Java Bean操作的支持
4、io:数据流、文件系统操作类;
5、lang:类型定义、基础的顶层定义等;
6、math:数学计算用的BigDecimal、BigInteger等
7、net:用于实现网络编程的类;
8、nio:非阻塞io
9、rmi:远程方法调用相关
10、security:涉及网络安全方面的类
11、sql:访问和处理java标准数据源的类
12、text:文本处理
13、util:工具类,各种数据结构、集合类;并发处理包;数据压缩zip包;正则等;

一、java中的集合
分为两类:Collection根接口定义的类似于数学上集合,另一个是Map接口定义的键值对映射
List允许重复,Set不允许重复,Queue是一种特殊的线性表结构,在Collection定义的操作之上限定了先进先出


1、HashMap
什么是:
HashMap是基于哈希表的一个Map接口实现,以Key-Value的形式存在,可以通过key快速的存取Value。
特性:
键值对存储,可以接受null键和值(HashTable不能);非synchronized;性能比较高,很快;
结构:
这与它的特殊结构是分不开的:
HashMap采用的拉链式存储结构,整合了数组和链表的优势;当新建一个HashMap时会初始化一个Table数组,每个数组存储一个桶(称为Bucket),每个Bucket中存储数据节点Entry。
存取实现原理:
put方法中将通过key计算hash值,找到Bucket,这里解决Hash碰撞是采用LinkedList链表存储的方式,将冲突节点插入链表头部;
get方法中也是通过key计算hash值,找到Bucket,下面通过遍历比较key的hash获取节点;
另外,默认table数组长度16,负载因子0.75,桶容量16,??存储节点超过后会resize扩容
4种遍历方式:

//1、取得所有key的set集合
    Set<Integer> keys = map.keySet();
    for (Integer key : keys) {
        System.out.println("key:" + key + " -- value:" + map.get(key));
    }
// 2、取得所有value的set集合,只能遍历value
    Collection<String> values = map.values();
    for (String value : values) {
        System.out.println("value:" + value);
    }
// 3、获取entry,通过entry对象访问getKey和getValue访问
    Set<Map.Entry<Integer, String>> entrys = map.entrySet();
    for (Map.Entry<Integer, String> entry : entrys) {
        System.out.println("key:" + entry.getKey() + " - value:" + entry.getValue());
    }
// 4、获取entry,通过Iterator迭代器的方法访问(推荐使用,尤其是Map集合容量大时)
    Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry<Integer, String> entry = it.next();
        System.out.println(entry.getKey() + "--" + entry.getValue());
}

HashTable与HashMap用法类似,但是是线程安全的,synchronized方法
WeakHashMap是一种改进的HashMap,对key实行弱引用,如果一个key不再被外部所引用,那么该key可以被GC回收。
2、Collection基本接口,其子接口List、Set
ArrayList:实现的是一个可变大小的数组。允许null值、重复值、没有同步;线性表
Vector:非常类似ArrayList,但是Vector是同步的。
LinkedList:实现了List接口,允许null值,没有同步,线性链表
HashSet,是Set接口的实现,HashMap是map接口实现,不是同一个派生家族。虽然接口规范不同,但是他们底层的Hash机制一样。HashSet底层就是用HashMap实现的,用的HashMap的Key存的。

二、MD5加密算法(Message-Digest algorithm 5,信息摘要算法第5版)
是一种不可逆的Hash压缩算法,输入任意长度的信息,经过处理后输出128位的信息;
特点:
压缩,任意长度的数据,算出的MD5值长度固定;
容易计算
抗修改性:对原数据进行任何改动,MD5值都会有很大的区别;
强抗碰撞:已知元数据和其MD5值,找到一个具有相同MD5值的数据(伪造数据)非常困难;
用途:
数字签名;密码存储(没法反推);校验文件是否更新修改;
JDK自带方法:

java.security.MessageDigest包
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] result = md.digest(source.getBytes());

Apache commons-codec工具包:

org.apache.commons.codec.digest.DigestUtils.md5Hex(SOURCE_STR)

三、Base64
是网络上常见的用来传输8Bit字节码的编码方式,基于64个可打印字符来表示二进制数据。
特性和用途:
是一种数据表示形式,可以用于http请求,把二进制的数据放到http请求中(如隐藏表单域);采用Base64编码具有不可读性,需要解码后才能阅读。

关于我们 |  广告服务 |  联系我们 |  网站声明

Copyright © 2015 - 2016 DISPACE.NET |  使用帮助 |  关于我们 |  投诉建议

京ICP备13033209号-2