Python 官方文档:入门教程 => 点击学习
稀疏数组 当一个数组中的元素大多为0或者相同元素的时候,可以用稀疏数组来压缩 稀疏数组只记录 行row 列col 值value 将下列的二维数组转为稀疏数组,如下
将下列的二维数组转为稀疏数组,如下两图所示
1.实现二维数组转为稀疏数组的步骤:
代码实现:
public class SparseArray {
public static void main(String[] args) {
// 创建一个原始二维数组
// 0表示没有棋子,1,2各表示一种棋
int chessArr[][] = new int[8][8];
chessArr[1][1] = 1;
chessArr[2][2] = 2;
// 遍历原始数组,获得不等于 0 的个数,并输出原始数组
int sum = 0;
System.out.println("原始数组:");
for (int[] ints : chessArr) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
if (anInt != 0){
sum++;
}
}
System.out.println();
}
System.out.println(sum);
// 创建稀疏数组并赋值
int sparseArray[][] = new int[sum+1][3];
int row = chessArr.length; // 原数组的行数
int col = chessArr[0].length; // 原数组的列数
sparseArray[0][0] = row;
sparseArray[0][1] = col;
sparseArray[0][2] = sum;
// 遍历原始数组并赋值给稀疏数组
int count = 0; // count 为计数器
for (int i = 0;i < row;i++) {
for (int j = 0;j < col;j++) {
if (chessArr[i][j] != 0) {
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = chessArr[i][j];
}
}
}
// 输出得到的稀疏数组
System.out.println("稀疏数组为:");
for (int i = 0 ;i < sparseArray.length;i++) {
System.out.println(sparseArray[i][0]+"\t"+sparseArray[i][1]+"\t"+sparseArray[i][2]);
}
}
}
2.实现二维数组转稀疏数组的步骤
代码实现:
public class SparseArray {
public static void main(String[] args) {
...... // 接上一段代码
// 输出得到的稀疏数组
System.out.println("稀疏数组为:");
for (int i = 0 ;i < sparseArray.length;i++) {
System.out.println(sparseArray[i][0]+"\t"+sparseArray[i][1]+"\t"+sparseArray[i][2]);
}
// 创建新的二维数组
int newChessArray[][] = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i = 1 ;i < sparseArray.length;i++) {
newChessArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
// 输出新的二维数组
System.out.println("恢复后的二维数组是:");
for (int[] ints : newChessArray) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}
3.将稀疏数组写入磁盘
public static void main(String[] args) {
........
// 将稀疏数组存入磁盘
FileOutputStream fw = null;
try {
fw = new FileOutputStream("sparseArray.txt");
// 遍历写入磁盘
for (int i = 0; i < sparseArray.length; i++) {
for (int j = 0; j < 3; j++) {
fw.write(sparseArray[i][j]);
}
}
fw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fw != null){
fw.close();
}
}
}
4.从磁盘读取稀疏数组
public static void main(String[] args) {
.......
// 从磁盘读取稀疏数组
FileInputStream fi = null;
int newSparseArray[][] = new int[sum+1][3]; // sum 指前面二维数组有值的个数
try {
fi = new FileInputStream("sparseArray.txt");
for (int i = 0;i < newSparseArray.length;i++) {
for (int j = 0;j < 3;j++){
newSparseArray[i][j] = fi.read();
}
}
} catch (FileNotFoundException e){
e.printStackTrace();
} finally {
if (fi != null){
fi.close();
}
}
}
到此这篇关于浅谈Java数据结构之稀疏数组知识总结的文章就介绍到这了,更多相关Java稀疏数组内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: 浅谈Java数据结构之稀疏数组知识总结
本文链接: https://www.lsjlt.com/news/126730.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0