第一种方法(只学到数组的看):
定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0,
package demo01; import java.sql.Array;
import java.util.Arrays;
/*JAVA数组去重**/
public class ArrayQC {
public static void main(String[] args) {
// 获取一个无重复元素的数组
int[] arr = new int[] { 11, 22, 22, 33, 44, 55, 44, 66, 66, 66 };
// 先确定新数组的长度
int[] newArr = new int[arr.length]; int index = 0; // 新数组存储元素索引(或者说无重复的个数) outer: for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
//当数据重复时,跳出外圈循环
if (arr[i] == arr[j]) {
//System.out.println("arr[i]:"+arr[i]+"arr[j]:"+arr[j]);
continue outer;
}
}
// 后面没有与当前元素重复的值,保存这个数
//System.out.println("for内的index:"+index);
newArr[index] = arr[i];
index++;
}
// 新数组中存储着无重复的值和后面一些无效的0
//System.out.println("index:"+index);
int[] result = new int[index];
for (int i = 0; i < index; i++) { // 遍历有效值个数
result[i] = newArr[i];
}
System.out.println(Arrays.toString(result));
} }
第二中方法:
/* 第二种方法:
*
* 一个一个删除,有一个删一个.
* 把数组中的一个数据和其他数据进行比较,如果有一个重复时,就直接开始创建新数组把重复的元素去除,并重新赋给旧数组
*/ public static void main(String[] args) { int[] arr = { 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; // 1, 5, 3, 4, 8 for (int i = 0; i < arr.length; i++) { for (int j = i + 1; j < arr.length; j++) { if (arr[i] == arr[j]) {
//System.out.println("arr[i]:"+arr[i]+",arr[j]"+arr[j]);
// return返回的数字的地址而非数组的数值(不懂的华看一下变量的 名 和所代表的数据地址的关系)
arr = aa(arr, j);
// 改变的数组中新数据顶替了覆盖数组的就数据,所以还要重新比较一次 // { 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; 下标 0 1 2
// 当下标为1被删除了 ,下标2的数据补上 0 2 这个新元素还没有被比较,所以要再比较一次,所以j--
//System.out.println("j:"+j);
j--;
}
}
} for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
} } // 需要获得旧数组和重复元素的下标,然后改成新数组并返回出来新数组
public static int[] aa(int[] arr, int index) { // 新数组,每发现一个就去除一个.所以长度-1 就行
int[] newArr = new int[arr.length - 1];
// 因为就数组的下标要去除一个,又不知道那个,所以定义一个变量自增来当新数组的下标
int c = 0;
for (int i = 0; i < arr.length; i++) {
// 判断传进来的那个重复的下标和数组中的下标相等时,下标的元素就不用重新赋给新数组了
if (index != i) {
newArr[c] = arr[i];
c++;
}
}
//System.out.println("newArr:"+newArr.toString());
//bl(newArr);
return newArr;
} //遍历数组
//public static void bl(int[] arr){
// for(int i = 0 ; i < arr.length ; i++){
// System.out.print(arr[i]+ ", ");
// }
//}
第三种方法;
/**第三种方法:
*
* 相同的一起删除,当发现相同的元素,先统计重复的个数,然后一起删掉,得到新数组赋给旧数组 */ public static void main(String[] args) { int[] arr = { 8, 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; arr = a2(arr); for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
} public static int[] a2(int[] arr) { int a = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = i; j < arr.length - 1; j++) { // 如果有相同的,就统计出相同元素的个数
if (arr[i] == arr[j + 1]) {
a += 1;
}
}
if (a != 0) {
// return返回的数字的地址而非数组的数值(不懂的华看一下变量的 名 和所代表的数据地址的关系)
arr = a1(arr, arr[i], a);
// 一个元素个数获得到,统计变量清零,等待回去下一个元素重复的个数
a = 0;
}
}
System.out.print("方法a2:");
bl(arr);
return arr;
} // 删除里面重复的元素
public static int[] a1(int[] arr, int arr2, int a) {
// 因为就数组的下标要去除一个,又不知道那个,所以定义一个变量自增来当新数组的下标
int c = 1;
// 获得新数组的长度,就是旧数组减去元素重复的次数
int[] aa = new int[arr.length - a];
// 重复的元素也要保留一个
aa[0] = arr2;
for (int i = 0; i < arr.length; i++) {
// 不与重复元素相同的元素都非给新数组
if (arr2 != arr[i]) {
aa[c++] = arr[i];
}
}
System.out.print("方法a1:");
bl(aa);
return aa;
} //遍历数组
public static void bl(int[] arr){
for(int i = 0 ; i < arr.length ; i++){
System.out.print(arr[i] + ", ");
}
System.out.println("数组遍历完毕。");
}
参考文档: https://blog.csdn.net/binLi_Cheng/article/details/81383197
(PASS)JAVA数组去重 三种方法 (不用集合)的更多相关文章
-
斐波那契数列-java编程:三种方法实现斐波那契数列
题目要求:编写程序在控制台输出斐波那契数列前20项,每输出5个数换行 斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 这个数列 ...
-
Eclipse远程调试Java代码的三种方法
Eclipse远程调试Java代码的三种方法, 第1种方法是用来调试已经启动的Java程序,Eclipse可以随时连接到远程Java程序进行调试, 第2种方法可以调试Java程序启动过程,但是Ecli ...
-
Java 数组的三种创建方法,数组拷贝方法
public static void main(String[] args) {//创建数组的第一种方法int[] arr=new int[6];int intValue=arr[5];//Syste ...
-
Java 数组的三种创建方法
public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intValue=arr[5]; //S ...
-
js数组去重五种方法
今天来聊一聊JS数组去重的一些方法,包括一些网上看到的和自己总结的,总共5种方法(ES5). 第一种:遍历数组法 这种方法最简单最直观,也最容易理解,代码如下: var arr = [2, 8, 5, ...
-
{转}Java 字符串分割三种方法
http://www.chenwg.com/java/java-%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%88%86%E5%89%B2%E4%B8%89%E7%A7%8D%E6%9 ...
-
Java数组的三种打印方式
1.数组的输出的三种方式 一维数组: 定义一个数组 int[] array = {1,2,3,4,5}; (1)传统的for循环方式 for(int i=0;i<array.length;i++ ...
-
java script 数组去重两种方法
第一种方法: var arr=[1,1,2,3,4,4,4,5,6,6,6,6]; var arrb=Array(); for(var i=0;i<arr.length;i++) ...
-
Java创建数组的三种方法
■ 第一种: int[] arr=new int[6]; arr[0] = 1; arr[1] = 2 arr[2] = 3; arr[3] = 4; arr[4] = 5; arr[5] = 6; ...
随机推荐
-
记录一次bug解决过程:git深入学习和JDK8新特性
一 总结 熟悉廖雪峰git基础; 由于git跟踪的是修改,而不是版本号:因此对于修改撤销的操作,文件在eclipse中依旧有>修改标记,这点不同于svn. 二 BUG描述:熟悉Git基础 在Gi ...
-
Excel有用的宏
=Index({"同事","同学","亲戚"},b3) 前面的array默认索引从1开始. 如果b3为1.而枚举数组是: 0=>同事, ...
-
移动端造json假数据时的坑(转义符问题)
最近在 Json 数据的解析上碰到了一些坑,特此记录一下. 正文 迭代开发中,经常出现服务端接口还没开发完成的情况,所以经常需要移动端自己在本地造一些假数据. emmm,虽然说好像造假数据也不是什么很 ...
-
转载 -- 	jquery easyui datagrid 动态表头 + 嵌套对象属性展示
代码功能: 1.datagrid 的表头由后台生成,可以配置在数据库 2.datagrid 的列绑定数据 支撑嵌套对象 $(function() { var columns = new Array() ...
-
[蓝点ZigBee] Zstack 之点亮OLED液晶 ZigBee/CC2530 视频资料
这一小节主要演示如何在Zstack 下移植液晶驱动,我们选取了目前比较流行的OLED 作为移植目标. 移植关键点 1 修改 GPIO pin, 2 如何将Zstack ...
-
Xgboost: 一把屠龙刀的自我修养
目录 引言 Xgboost 参考文献 引言 集成学习, 在机器学习中是一个非常重要的思想: 把多个弱分类器精巧地组合在一起,成为一个很强大的学习器. 集成学习也因此一直处在风口浪边. 集成学习主要分为 ...
-
ssh无法访问服务器报“ssh-dss”认证错误
故障描述: 在windows下的ssh客户端直接报错,内容为: Unable to negotiate with legacyhost: no matching host key type found ...
-
Altium Designer 13 安装完整元件库
Altium Designer更新的非常快,都快赶上chrome了,13出来没多久14又出来了,之前一直用AD9.4,算是10之前的最后一个版本,也是很经典的一个版本.安装新版本后看到在目录结构上有些 ...
-
ps不显示命令本身的进程号
当我们查看某个服务的进程时候,它会把命令本身的进程显示出来.如下图: 进程号2383 就是我命令本身的进程号,和我实际想看的进程无关 特别是在我们写脚本,kill进程时候会报错: 解决办法可以优化脚本 ...
-
maven pom文件结构简析
要使用maven,入门的最好办法就是在myeclipse中直接新建一个maven项目,同时勾选create a simple project选项,这样能快速创建一个简单的默认类型的符合maven默认结 ...