int默认是0,integer默认是null?
时间: 2024-02-27 17:56:33 浏览: 139
是的,int 类型的默认值是 0,而 Integer 类型的默认值是 null。这是因为 int 是基本数据类型,而 Integer 是对象类型。在 Java 中,基本数据类型有默认值,而对象类型的默认值是 null。
在 Java 中,声明一个 int 类型的变量时,如果没有显式地赋初值,则该变量的默认值为 0。例如:
```java
int a;
System.out.println(a); // 输出 0
```
而声明一个 Integer 类型的变量时,如果没有显式地赋初值,则该变量的默认值为 null。例如:
```java
Integer b;
System.out.println(b); // 输出 null
```
需要注意的是,在使用未赋值的变量时,Java 编译器会给出警告。因此,为了避免出现不必要的错误,建议在声明变量时就显式地赋初值。
相关问题
public int lowestCommonAncestor(TreeNode root, int o1, int o2)/记录遍历到的每个节点的父节点/ { Map<Integer, Integer> parent = new HashMap<>(); Queue<TreeNode> queue = new LinkedList<>(); parent.put(root.val, Integer.MIN_VALUE);//给根节点默认一个值 queue.add(root); //直到两个节点都找到为止 while (!parent.containsKey(o1) || !parent.containsKey(o2)) { TreeNode node = queue.poll();//出队 if (node.left != null)//左子节点不为空,记录下他的父节点 { parent.put(node.left.val, node.val); /左子节点不为空,加入队列/ queue.add(node.left); } //右节点 if (node.right != null) { parent.put(node.right.val, node.val); queue.add(node.right); } } Set<Integer> ancestors = new HashSet<>(); //记录下o1和他的祖先节点,从o1节点开始一直到根节点。 while (parent.containsKey(o1)) { ancestors.add(o1); o1 = parent.get(o1); } //查看o1和他的祖先节点是否包含o2节点,如果不包含再看是否包含o2的父节点 while (!ancestors.contains(o2)) o2 = parent.get(o2); return o2;的时间复杂度和空间复杂度是多少
时间复杂度和空间复杂度都是 O(n),其中 n 为树中节点的数量。
时间复杂度分析:最坏情况下,需要遍历整棵树才能找到两个节点,因此时间复杂度为 O(n)。
空间复杂度分析:需要一个 HashMap 来记录每个节点的父节点,因此空间复杂度为 O(n)。同时需要一个队列来辅助遍历,最大情况下队列中会存储一层所有节点,因此空间复杂度也为 O(n)。两者相加得到总的空间复杂度为 O(n)。
private static void export(HttpServletResponse response, File file, String fileName, Map<String, List<List<Object>>> sheetMap, Map<Integer, List<String>> selectMap) { // 整个 Excel 表格 book 对象 SXSSFWorkbook book = new SXSSFWorkbook(); // 每个 Sheet 页 Set<Entry<String, List<List<Object>>>> entries = sheetMap.entrySet(); for (Entry<String, List<List<Object>>> entry : entries) { List<List<Object>> sheetDataList = entry.getValue(); Sheet sheet = book.createSheet(entry.getKey()); // 创建合并算法数组 int rowLength = sheetDataList.size(); int columnLength = sheetDataList.get(0).size(); int[][] mergeArray = new int[rowLength][columnLength]; for (int i =0 ; i < sheetDataList.size(); i++) { // 每个 Sheet 页中的行数据 Row row = sheet.createRow(i); List<Object> rowList = sheetDataList.get(i); for (int j = 0; j < rowList.size(); j++) { // 每个行数据中的单元格数据 Object o = rowList.get(j); int v = 0; if (o instanceof URL) { // 如果要导出图片的话, 链接需要传递 URL 对象 setCellPicture(book, row, patriarch, i, j, (URL) o); } else { Cell cell = row.createCell(j); if (i == 0) { // 第一行为表头行,采用灰色底背景 v = setCellValue(cell, o, headStyle); } else { // 其他行为数据行,默认白底色 v = setCellValue(cell, o, rowStyle); } } mergeArray[i][j] = v; } } } } 我如何在这里获取档案名称的数据内容 并把相同的内容纵向合并起来呢
您可以使用一个 `Map` 来保存每个文件名对应的行数列表,然后在遍历行数据时,根据文件名获取相应的行数列表,将相同的文件名在纵向上进行合并。以下是修改后的代码示例:
```java
private static void export(HttpServletResponse response, File file, String fileName,
Map<String, List<List<Object>>> sheetMap, Map<Integer, List<String>> selectMap) {
// 整个 Excel 表格 book 对象
SXSSFWorkbook book = new SXSSFWorkbook();
// 每个 Sheet 页
Set<Entry<String, List<List<Object>>>> entries = sheetMap.entrySet();
for (Entry<String, List<List<Object>>> entry : entries) {
List<List<Object>> sheetDataList = entry.getValue();
Sheet sheet = book.createSheet(entry.getKey());
// 创建合并算法数组
int rowLength = sheetDataList.size();
int columnLength = sheetDataList.get(0).size();
int[][] mergeArray = new int[rowLength][columnLength];
// 保存每个文件名对应的行数列表
Map<String, List<Integer>> fileNameRowsMap = new HashMap<>();
for (int i = 0; i < sheetDataList.size(); i++) {
// 每个 Sheet 页中的行数据
Row row = sheet.createRow(i);
List<Object> rowList = sheetDataList.get(i);
String currentFileName = (String) rowList.get(0); // 假设文件名在第一列
// 获取当前文件名对应的行数列表
List<Integer> rows = fileNameRowsMap.get(currentFileName);
if (rows == null) {
rows = new ArrayList<>();
fileNameRowsMap.put(currentFileName, rows);
}
for (int j = 0; j < rowList.size(); j++) {
Object o = rowList.get(j);
int v = 0;
if (o instanceof URL) {
// 如果要导出图片的话, 链接需要传递 URL 对象
setCellPicture(book, row, patriarch, i, j, (URL) o);
} else {
Cell cell = row.createCell(j);
if (i == 0) {
// 第一行为表头行,采用灰色底背景
v = setCellValue(cell, o, headStyle);
} else {
// 其他行为数据行,默认白底色
v = setCellValue(cell, o, rowStyle);
}
}
mergeArray[i][j] = v;
}
// 将当前行数添加到对应的文件名行数列表中
rows.add(i);
}
// 纵向合并相同的文件名
for (List<Integer> rows : fileNameRowsMap.values()) {
if (rows.size() > 1) {
for (int column = 0; column < columnLength; column++) {
int startRow = rows.get(0);
int endRow = rows.get(rows.size() - 1);
sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, column, column));
}
}
}
}
}
```
在这个示例中,我创建了一个 `fileNameRowsMap` 来保存每个文件名对应的行数列表。在遍历行数据时,我将当前行对应的文件名添加到对应的行数列表中。然后,我使用 `fileNameRowsMap` 进行纵向合并相同的文件名所在的行。请注意,这个示例假设文件名在每行数据的第一列。如果文件名在其他列上,请根据实际情况进行调整。
阅读全文