Java一维与二维数组的拷贝与排序
Java一维与二维数组的拷贝与排序
Arrays.sort()
一维数组升序排序
e.g.(demo.java)
import java.util.Arrays;
public class demo {
public static void main(String[] args){
int[] arr = new int[]{1,5,98,6,78,65};
Arrays.sort(arr);
for(int i : arr){
System.out.println(i);
}
}
output:
1
5
6
65
78
98
二维数组按行升序排序
e.g.(demo.java)
import java.util.Arrays;
public class demo {
public static void main(String[] args){
int [][] arr = new int[][]{{1,20,3},{20,3,5},{9,0,8}};
int n = arr.length;
for(int i = 0;i < n;i++){
Arrays.sort(arr[i]);
}
for(int i = 0;i < n;i++){
for(int j : arr[i]){
System.out.print(j + " ");
}
System.out.println();
}
}
output:
1 3 20
3 5 20
0 8 9
二维数组按列升序排序
思路:将数组转置,每行调用Arrays.sort()
,再转置回来
e.g.(demo.java)
import java.util.Arrays;
public class demo {
public static int[][] arrTransfer(int[][] arr){ //借用线代思想,对矩阵转置
int n = arr.length;
int m = arr[0].length;
int[][] ret = new int[m][n];
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
ret[j][i] = arr[i][j];
}
}
return ret;
}
public static void main(String[] args){
int [][] arr = new int[][]{{1,20,3},{20,3,5},{9,0,8}};
int n = arr.length;
int m = arr[0].length;//该方法适用于矩阵类二维数组,不等长二维数组不适用
int[][] tempArr = new int[m][n];
tempArr = arrTransfer(arr);
for(int i = 0;i < m;i++){
Arrays.sort(tempArr[i]);
}
arr = arrTransfer(tempArr);
for(int i = 0;i < n;i++){
for(int j : arr[i]){
System.out.print(j + " ");
}
System.out.println();
}
}
output:
1 0 3
9 3 5
20 20 8
Java中的数组
Java中数组的基本性质
- 数组是使用统一名称引用的一组具有相同类型的数据
- Java中的数组属于引用类型(对象),类似C语言中的指针
一维数组的拷贝
e.g.(demo.java)
import java.util.Arrays;
public class demo {
public static void main(String[] args){
int[] arr1 = {10,2,5,4};
int[] arr2 = arr1.clone(); //获得arr1的一份拷贝,arr2指向的内存空间不同于arr1
int[] arr3 = arr1; //获得了arr1(引用)的拷贝,赋给arr3,二者同时指向一块内存空间,因此对arr3或arr1做的操作都会反映到同一块内存空间上
Arrays.sort(arr1);
System.out.println("arr1" + Arrays.toString(arr1));
System.out.println("arr2" + Arrays.toString(arr2));
System.out.println("arr3" + Arrays.toString(arr3));
}
}
二维数组的拷贝
二维数组可以看作数组的数组,即,每一个元素都是一个一维数组,因此可以依照上述拷贝一维数组的思想拷贝二维数组
e.g.(demo.java)
import java.util.Arrays;
public class demo {
public static void main(String[] args){
int[][] arr1 = {{1,20,4},{23,92,24},{92,482,234}};
int[][] arr2 = arr1.clone();
int n = arr1.length;
int m = arr1[0].length;
int[][] arr3 = new int[n][m];
for(int i = 0;i < n;i++){
arr3[i] = arr1[i].clone();
}
for(int i = 0;i < n;i++){
Arrays.sort(arr1[i]);
}
System.out.println("arr1" + Arrays.toString(arr1));
System.out.println("arr2" + Arrays.toString(arr2));
System.out.println("arr3" + Arrays.toString(arr3));
for(int i = 0;i < n;i++){
System.out.println("arr1" + Arrays.toString(arr1[i]));
}
for(int i = 0;i < n;i++){
System.out.println("arr2" + Arrays.toString(arr2[i]));
}
for(int i = 0;i < n;i++){
System.out.println("arr3" + Arrays.toString(arr3[i]));
}
}
}
output:
arr1[[I@4eec7777, [I@3b07d329, [I@41629346]
arr2[[I@4eec7777, [I@3b07d329, [I@41629346]
arr3[[I@214c265e, [I@448139f0, [I@7cca494b]
arr1[1, 4, 20]
arr1[23, 24, 92]
arr1[92, 234, 482]
arr2[1, 4, 20]
arr2[23, 24, 92]
arr2[92, 234, 482]
arr3[1, 20, 4]
arr3[23, 92, 24]
arr3[92, 482, 234]
从输出可以看出,arr2和arr1值相等,指向同一块内存空间;arr3复制arr1的数据到另一块内存空间,不受arr1引用的内存空间的数据的改变影响;同时可以看出,arr1是一个特殊的数组,每个元素是一个一维数组
关于浅拷贝与深拷贝
上述的拷贝仅仅局限于数组,事实上对象等也可以拷贝,此处涉及深浅拷贝的区别,读者可以参考以下两篇博客:
一个例题
读者可以在此题中简单应用上述数组知识
Java一维与二维数组的拷贝与排序的更多相关文章
- Java中的二维数组
Java 中的二维数组 所谓二维数组,可以简单的理解为是一种"特殊"的一维数组,它的每个数组空间中保存的是一个一维数组. 那么如何使用二维数组呢,步骤如下: 1. 声明数组并分配空 ...
- java学习之二维数组
java当中的二维数组,存储一组比较特殊的对象.他存储一个数组,同时存储的数组当中又存储着元素. java二维数组的声明方式一: class Arr2Demo { public static void ...
- JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数
JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数 示例如下 至少需要九个元素:"A","B","C",&q ...
- Java基础教程——二维数组
二维数组 Java里的二维数组其实是数组的数组,即每个数组元素都是一个数组. 每个数组的长度不要求一致,但最好一致. // 同样有两种风格的定义方法 int[][] _arr21_推荐 = { { 1 ...
- PHP 二维数组根据某个字段排序
二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort 对数组的值按 ...
- PHP 按二维数组的键值排序
/** * 按二维数组的键值排序 * @param unknown $array 二维数组 * @param unknown $key 二维数组的键值 * @param string $order 升 ...
- PHP二维数组按某个字段排序
//准备 二维数组 //按一个字段排序 foreach($rank as $key=>$val){ $dos[$key] = $val['timelength']; } array_multis ...
- PHP开发小技巧②—实现二维数组根据key进行排序
在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...
- 三重for循环实现对二维数组的按列排序(JavaScript)
由C语言联想到的:三重for循环实现对二维数组的按列排序,并且牵扯到数据结构. 自己写的,水平有限,本文属于原创,可能存在错误,忘指正~ function circle() { var a = [ [ ...
随机推荐
- nginx高并发配置详解
https://www.cnblogs.com/liqiu/p/3152206.html 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 ...
- nginx 超时时间配置说明
做excel文件导入时 报 504 错误 是nginx网关超时导致 下面几个参数貌似没效果,反正我配置不起作用 这是有问题的配置属性 ,注意 于是我换了配置 ,放在http块里 ,配置生效了 #读 ...
- Linux命令--ss命令的参数及使用详解
ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...
- 细谈 Java 匿名内部类 【分别 使用 接口 和 抽象类实现】
1.前言 匿名内部类是什么东西? 没有名字的内部类就是匿名内部类. 什么场景使用? 匿名内部类适合创建那种只需要一次使用的类. 这是个很有用的东西,可想而知,如果不使用匿名内部类,哪些只需要使用一次的 ...
- 用jquery实现省市联动
<!-- 需求: [1] 动态生成省份选择框. [2] 当选择了省份的某一项时, 动态改变 城市选择中的列表项. --> <!DOCTYPE html> <html la ...
- CODING 携手 Thoughtworks 助力老百姓大药房打造”自治、自决、自动”的敏捷文化
老百姓大药房是中国具有影响力的药品零售连锁企业,中国药品零售企业综合竞争力百强冠军.中国服务业 500 强企业.湖南省百强企业. 自 2001 年创立以来,现已成功开发了湖南. 陕西.浙江.江苏等 * ...
- 【Java常用类】LocalDate、LocalTime、LocalDateTime
LocalDate.LocalTime.LocalDateTime 说明 JDK 1.0中包含了 一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被 ...
- Idea操作Maven详细使用:
Idea操作Maven详细使用: Maven简介 什么是 Maven Maven 的正确发音是[ˈmevən] "卖v",而不是"马瘟"以及其他什么瘟. Mav ...
- 字节一面:事务还没提交的时候,redolog 能不能被持久化到磁盘呢?
又是被自己菜醒的一天,总结面经看到这题目听都没听过,打开百度就像吃饭一样自然 老规矩,背诵版在文末.点击阅读原文可以直达我收录整理的各大厂面试真题 首先,咱需要明白的是,啥是持久化? 听起来高大上,换 ...
- C++与lua交互之C++访问lua
假设lua中: name="gzw" id=17010805 sex=man tab={ num=100, str="hello" } foo_one=func ...