Java基础的应用
使用BigDecimal需要注意
BigDecimal n1 = new BigDecimal("0"); BigDecimal n2 = new BigDecimal("2"); n1.add(n2); System.out.println(n1);----输出0
这里n1并不会加上n2的值,应该使用n1=n1.add(n2)
后端组成树结构
// 生成permission树状结构 @ResponseBody @RequestMapping("/get/permission/tree") public ResultVO<PermissionDO> toPermissionPage() { List<PermissionDO> permissions = databaseProviderRemoteService.getAllPermissions().getData(); // 生成一个根节点 PermissionDO root = null; // 创建一个Map保存id-PermissionDO,方法后面用pid去获取 Map<Integer, PermissionDO> permissionMap = new HashMap<>(); // 遍历list找出根节点 for (PermissionDO permissionDO : permissions) { // 获取id,并将id和permissionDO存入到map中 Integer id = permissionDO.getId(); permissionMap.put(id, permissionDO); // 获取pid Integer pid = permissionDO.getPid(); if (pid == null) { root = permissionDO; } } for (PermissionDO permissionDO : permissions) { // 我们先找出pid不为Null的节点 Integer pid = permissionDO.getPid(); if (pid != null) { // 通过pid对应的id我们找到它的父节点 PermissionDO parent = permissionMap.get(pid); parent.getChildren().add(permissionDO); } } return new ResultVO<PermissionDO>(ResultVO.SUCCESS, ResultVO.NO_MSG, root); }
IO流
java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。
字节流基类 | Inputstream | OutputStream |
字节文件操作流 | FileInputStream | FileOutputStream |
字节缓冲流(高效流) | BufferedInputStream | BufferedOutputStream |
NIO
三大组件:chanel、buffer、selector
###FileChannel和buffer的简单使用 RandomAccessFile accessFile = null; try { accessFile = new RandomAccessFile("test.txt", "rw"); FileChannel channel = accessFile.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); int bytesRead; while ((bytesRead = channel.read(buffer)) != -1) { buffer.flip(); while (buffer.hasRemaining()) { System.out.print((char) buffer.get()); } buffer.compact(); } } finally { accessFile.close(); }
缓冲区(buffer)的使用
buffer:缓冲区,实际上是一个容器、连续数组。Channel提供从文件、网络读取数据的渠道,但是读写的数据都必须经过buffer。
可以把buffer简单地理解为一组基本数据类型的元素列表,它通过几个变量来保存这个数据的当前位置状态:capacity,position,limit,mark。
索引 | 说明 |
---|---|
capacity | 缓冲区数组的总长度 |
position | 下一个要操作的数据元素的位置 |
limit | 缓冲区数组中不可操作的下一个元素的位置:limit<=capacity |
mark | 用于记录当前position的前一个位置或者默认是-1 |
作用 | 相关方法 |
---|---|
分配空间 | ByteBuffer buffer = ByteBuffer.allocate(1024); |
写入数据到buffer中 | int bytesRead = channel.read(buffer) |
判断buffer中有数据 | boolean b=buffer.hasRemaining() |
从Buffer中读取数据 | buffer.get() |
开始时 | buffer.flip() |
结束时 | buffer.compact() |
Arrays方法的巧用
-
将数组转换成List:
List<String> list = Arrays.asList(arr.split(","));
-
数组根据ASCII码排序:
Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER);
Iterator的使用
【---list---】 List<Integer> list = new ArrayList<>(); //遍历 while (iterator.hasNext()) { System.out.print(iterator.next() + " "); } //删除 while (iterator.hasNext()) { iterator.remove(); } 【---map---】 Map<Integer, String> map = new HashMap<>(); Iterator<Integer> it = map.keySet().iterator(); while(it.hasNext()) { Integer key = it.next(); System.out.println(key+"->"+map.get(key)); }
JVM相关
内存分配
命令 | 解释 |
---|---|
Xms | 指设定程序启动时占用内存大小 |
Xmx | 是指设定程序运行期间最大可占用的内存大小 |
Xss | 指设定每个线程的堆栈大小 |
以上三个参数的设置都是默认以Byte为单位的,也可以在数字后面添加[k/K]或者[m/M]来表示KB或者MB。