java 两个arraylist放着相同的东西,但顺序不同,怎么判断两个是不是相等
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 两个arraylist放着相同的东西,但顺序不同,怎么判断两个是不是相等相关的知识,希望对你有一定的参考价值。
相等条件:相互包含,且长度相等,和相等
boolean result = list1.containsAll(list2) && list2.containsAll(list1)&& list1.size() == list2.size()
&& list1.stream().mapToInt(x -> x).sum()
==list2.stream().mapToInt(x -> x).sum(); 参考技术A 按顺序遍历 全都相等 就相等 遍历中有一个不相等 直接返回不相等 参考技术B 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 队列比较
* @param <T>
* @param a
* @param b
* @return
*/
public static <T extends Comparable<T>> boolean compare(List<T> a, List<T> b)
if(a.size() != b.size())
return false;
Collections.sort(a);
Collections.sort(b);
for(int i=0;i<a.size();i++)
if(!a.get(i).equals(b.get(i)))
return false;
return true;
2. [代码]测试方法
?
1
2
3
4
5
6
7
public static void main(String[] args)
List<Integer> a = Arrays.asList(1,2,3,4);
List<Integer> b = Arrays.asList(4,3,2,1);
System.out.println(compare(a, b));
//执行结果 true追问
Collections.sort()是否对两个集合进行了重新排序
追答是的,不排序,不好比较集合内的值
追问两个list里边放的是我在数据库使用两种排序方法得到的值相同集合,
你再Collections.sort()一下不是没意义了吗
那你先把一个list的值全部存到map里,然后在循环另一个list,每次get一下map,只要有一个值没get为null就是不相等的了。
追问可是map是无序的啊
追答要么2个集合都统一排序,再比较,是我贴的第一个方法,要么第二种,值考虑内容,不考虑排序。
追问难道他不能直接比较。
非要Collections.sort()排序一下在比较吗?
要不用contains方法试试
追问还有我的类没有继承comperable,会不会报错啊
追答contains是List的方法啊
参考技术C //Collection中有一个取交集的方法,还有取交集的方法:retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。追问
这个有顺序关联吗,
我那个主要验证顺序是否相等
没有,只要相同的就会取出。
追问但我只想比较顺序
追答那就用LinkedList。
在 ArrayList 上排序,但 ArrayList 具有相同的值
【中文标题】在 ArrayList 上排序,但 ArrayList 具有相同的值【英文标题】:sorting on ArrayList but ArrayList have same value 【发布时间】:2013-07-16 00:34:01 【问题描述】:我的文字是
---- SınİSırU, SınİUzO puanları azalan :
------ deneme deneme denemeANYALTD. ŞTİ.1.751.2514.0010.001.751.2false
------ deneme deneme deneme DZLİ ŞTİ.1.431.1411.439.141.430.57false
------ deneme deneme deneme MEİN ŞTİ.1.291.1010.298.761.290.55false
------ deneme deneme deneme HAY ŞTİ.1.291.1010.298.761.290.55false
------ deneme deneme deneme AHAN ŞTİ.1.291.1010.298.761.290.55false
------ deneme deneme deneme MSA ŞTİ.1.291.1010.298.761.290.55false
------ deneme deneme deneme Ş ŞTİ.1.291.1010.298.761.290.55false
------ deneme deneme deneme KO. ŞTİ.1.251.0810.008.671.250.54false
kolon1:1.75,1.43,1.29...
kolon2:1.25,1.14,1.10..
然后我将它们从小到大排序。
有替换号码我不想替换号码。例如,如果我包含的文本包含 3,3,3,3,3,2,2,2,2,1,1,1,1,1,1
我只想要 1 2 3
public class PointStatue
private static List<Double> col1 = new ArrayList<Double>();
private static List<Double> col2 = new ArrayList<Double>();
private static List<Double> col3 = new ArrayList<Double>();
private static List<Double> col4 = new ArrayList<Double>();
private static List<Double> col5 = new ArrayList<Double>();
private static List<Double> col6 = new ArrayList<Double>();
private static List<Double> list=new ArrayList<Double>();
private static List<Double> numbers = new ArrayList<Double>();
public static void main(String[] args) throws IOException
ArrayList<String> puan;
puan = okuDiziyeKoy("C:\\deneme\\HW.txt");
System.out.format("%d kayıt okundu.%n", puan.size());
for (int j = 0; j < puan.size(); j++)
String point = puan.get(j);
String[] edit = point.split("[\\\\\\)]");
for (String s : edit)
String a = s.replaceAll("[\\\\-\\>\\>\\]\\[\\#\\*\\]+", "");
String b = a.replaceAll("[\\.]+", ",");
Scanner scanner = new Scanner(b);
while (scanner.hasNext())
if (scanner.hasNextDouble())
Double doubleValue = scanner.nextDouble();
numbers.add(doubleValue);
// System.out.println(Arrays.deepToString(numbers.toArray()));
// if scan end
else
//if it is string comes value here
String stringValue = scanner.next();
// if scan end
// while end
// for string s
// for j end
int col=1;
for(int i=0;i<numbers.size();i++)
Double rowValue = numbers.get(i);
switch(col)
case 1:
col1.add(rowValue);
Collections.sort(col1);
col++;
break;
case 2:
col2.add(rowValue);
Collections.sort(col2);
col++;
break;
case 3:
col3.add(rowValue);
Collections.sort(col3);
col++;
break;
case 4:
col4.add(rowValue);
Collections.sort(col4);
col++;
break;
case 5:
col5.add(rowValue);
Collections.sort(col5);
col++;
break;
case 6:
col6.add(rowValue);
Collections.sort(col6);
col = 1;
break;
//switch end
//for i end
System.out.println("kolon1"+col1);
System.out.println("kolon2"+col2);
System.out.println("kolon3"+col3);
System.out.println("kolon4"+col4);
System.out.println("kolon5"+col5);
System.out.println("kolon6"+col6);
// main end
private static ArrayList<String> okuDiziyeKoy(String dosyaAdı)
ArrayList<String> dizi = new ArrayList<String>();
try
FileInputStream fIS;
fIS = new FileInputStream(dosyaAdı);
Reader r = new InputStreamReader(fIS, "ISO-8859-9");
BufferedReader bR = new BufferedReader(r);
String satır;
while ((satır = bR.readLine()) != null)
dizi.add(satır);
catch (FileNotFoundException e)
e.printStackTrace();
catch (UnsupportedEncodingException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
return dizi;
// okuDiziyeKoyEnd
// class end
【问题讨论】:
不能用 Set 代替 List 吗?例如看看 HashSet 我不想改变我的arraylist值..我只想要块替换数字 【参考方案1】:看看TreeSet
:
基于 TreeMap 的 NavigableSet 实现。元素是 使用它们的自然顺序排序,或由提供的比较器排序 设置创建时间,取决于使用的构造函数。
这应该确保您只有一个元素,并且列表根据您的需要进行排序。
【讨论】:
但我不应该改变我的真实价值,因为之后这段代码将是 1500 双值 @user2583040,它不会改变实际值 - TreeSet 同时排序和重复数据删除,这正是您所要求的。如果您希望在完成后将值返回到 ArrayList 中,只需调用new ArrayList(treeSetInstance);
@user2583040:正如@David 建议的那样,您需要做的就是遍历当前列表并将您的值放入TreeSet
。该集合将自动对数据中可能存在的任何重复项进行排序和删除。
@npinti 你有什么例子吗?因为我从来没有听说过treeset :(
@user2583040:您可以在这里查看:tutorialspoint.com/java/java_treeset_class.htm 这是一个非常基本的示例,但它应该涵盖您需要的内容。您也可以提供一个比较器,以便您可以选择对象的排序方式。我建议您查看 Javadoc(链接在我的答案中)以获取更多信息。【参考方案2】:
简单的朋友:)
package com.blogspot.arashmd.examples;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class DupRemove
public static void main(String...arg)
double val[]=1,4.3,5,2,4,4,4,6.5,2,2,2,2,2,3.5,3.7,4,7,8,9;
for(int i=0;i<val.length;i++)
add(val[i]);
Collections.sort(list);
System.out.println(list);
static List<Double> list=new ArrayList<>();
public static void add(double d)
if(!list.contains(d))list.add(d);
和你的代码业务
/*
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class DupRemove
public static void main(String...arg)
double val[]=1,4.3,5,2,4,4,4,6.5,2,2,2,2,2,3.5,3.7,4,7,8,9;
for(int i=0;i<val.length;i++)
add(val[i]);
Collections.sort(list);
System.out.println(list);
static List<Double> list=new ArrayList<>();
public static void add(double d)
if(!list.contains(d))list.add(d);
*/
import java.io.IOException;
import java.util.*;
public class PointStatue
private static List<Double> col1 = new ArrayList<Double>();
private static List<Double> col2 = new ArrayList<Double>();
private static List<Double> col3 = new ArrayList<Double>();
private static List<Double> col4 = new ArrayList<Double>();
private static List<Double> col5 = new ArrayList<Double>();
private static List<Double> col6 = new ArrayList<Double>();
private static List<Double> list=new ArrayList<Double>();
private static List<Double> numbers = new ArrayList<Double>();
public static void main(String[] args) throws IOException
ArrayList<String> puan;
puan = okuDiziyeKoy("C:\\deneme\\HW.txt");
System.out.format("%d kayıt okundu.%n", puan.size());
Double doubleValue;
for (int j = 0; j < puan.size(); j++)
String point = puan.get(j);
String[] edit = point.split("[\\\\\\)]");
for (String s : edit)
String a = s.replaceAll("[\\\\-\\>\\>\\]\\[\\#\\*\\]+", "");
String b = a.replaceAll("[\\.]+", ",");
Scanner scanner = new Scanner(b);
while (scanner.hasNext())
if (scanner.hasNextDouble())
doubleValue = scanner.nextDouble();
if(!numbers.contains(doubleValue))
numbers.add(doubleValue);
// System.out.println(Arrays.deepToString(numbers.toArray()));
// if scan end
else
//if it is string comes value here
String stringValue = scanner.next();
// if scan end
// while end
// for string s
// for j end
int col=1;
for(int i=0;i<numbers.size();i++)
Double rowValue = numbers.get(i);
switch(col)
case 1:
col1.add(rowValue);
col++;
break;
case 2:
col2.add(rowValue);
col++;
break;
case 3:
col3.add(rowValue);
col++;
break;
case 4:
col4.add(rowValue);
col++;
break;
case 5:
col5.add(rowValue);
col++;
break;
case 6:
col6.add(rowValue);
col = 1;
break;
//switch end
//for i end
Collections.sort(col1);
Collections.sort(col2);
Collections.sort(col3);
Collections.sort(col4);
Collections.sort(col5);
Collections.sort(col6);
System.out.println("kolon1"+col1);
System.out.println("kolon2"+col2);
System.out.println("kolon3"+col3);
System.out.println("kolon4"+col4);
System.out.println("kolon5"+col5);
System.out.println("kolon6"+col6);
// main end
【讨论】:
【参考方案3】:试试这个,它会在所有行中找到重复值,而且每一行也对我有用:)
/*
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class DupRemove
public static void main(String...arg)
double val[]=1,4.3,5,2,4,4,4,6.5,2,2,2,2,2,3.5,3.7,4,7,8,9;
for(int i=0;i<val.length;i++)
add(val[i]);
Collections.sort(list);
System.out.println(list);
static List<Double> list=new ArrayList<>();
public static void add(double d)
if(!list.contains(d))list.add(d);
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class PointStatue
/*private static List<Double> col1 = new ArrayList<Double>();
private static List<Double> col2 = new ArrayList<Double>();
private static List<Double> col3 = new ArrayList<Double>();
private static List<Double> col4 = new ArrayList<Double>();
private static List<Double> col5 = new ArrayList<Double>();
private static List<Double> col6 = new ArrayList<Double>();
private static List<Double> col7 = new ArrayList<Double>();
private static List<Double> col8 = new ArrayList<Double>();*/
//private static List<Double> list=new ArrayList<Double>();
private static ArrayList<List<Double>> rows=new ArrayList<List<Double>>();
private static List<Double> numbers = new ArrayList<Double>();
private static void okuDiziyeKoy(String path,ArrayList<String> arr) throws Exception
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(path)));
//skip the first line
br.readLine();
String g;
while((g=br.readLine())!=null)
arr.add(g);
public static void main(String[] args) throws Exception
ArrayList<String> puan = new ArrayList<String>();
okuDiziyeKoy("C:/deneme/HW.txt", puan);
// puan = okuDiziyeKoy("C:\\deneme\\HW.txt");
System.out.format("%d kayıt okundu.%n", puan.size());
Double doubleValue;
for (int j = 0; j < puan.size(); j++)
List<Double> listToAdd=new ArrayList<Double>();
rows.add(j, listToAdd);
String point = puan.get(j);
//split data(line) by
String[] edit = point.split("[][]");
for(int l=3;l<edit.length-1;l++)
//parsing String as double
doubleValue=Double.parseDouble(edit[l]);
//check if double value is not exist then add it to list
if(!numbers.contains(doubleValue))
numbers.add(doubleValue);
if(!listToAdd.contains(doubleValue))
listToAdd.add(doubleValue);
/* for (String s : edit)
String a = s.replaceAll("[\\\\-\\>\\>\\]\\[\\#\\*\\]+", "");
String b = a.replaceAll("[\\.]+", ",");
Scanner scanner = new Scanner(b);
while (scanner.hasNext())
if (scanner.hasNextDouble())
doubleValue = scanner.nextDouble();
if(!numbers.contains(doubleValue))
numbers.add(doubleValue);
// System.out.println(Arrays.deepToString(numbers.toArray()));
// if scan end
else
//if it is string comes value here
String stringValue = scanner.next();
// if scan end
// while end
// for string s
// for j end*/
Collections.sort(numbers);
System.out.println("Unique values(in all rows): ");
for(Double d :numbers)
System.out.print(d+" ");
System.out.println();
/*int col=1;
for(int i=0;i<numbers.size();i++)
Double rowValue = numbers.get(i);
switch(col)
case 1:
col1.add(rowValue);
col++;
break;
case 2:
col2.add(rowValue);
col++;
break;
case 3:
col3.add(rowValue);
col++;
break;
case 4:
col4.add(rowValue);
col++;
break;
case 5:
col5.add(rowValue);
col++;
break;
case 6:
col6.add(rowValue);
col = 1;
break;
//switch end
//for i end*/
/* Collections.sort(col1);
Collections.sort(col2);
Collections.sort(col3);
Collections.sort(col4);
Collections.sort(col5);
Collections.sort(col6);*/
/*System.out.println("kolon1 "+col1);
System.out.println("kolon2 "+col2);
System.out.println("kolon3 "+col3);
System.out.println("kolon4 "+col4);
System.out.println("kolon5 "+col5);
System.out.println("kolon6 "+col6);*/
//sorting each row
for(int i=0;i<rows.size();i++)
Collections.sort(rows.get(i));
//showing each row(array)
for(int i=0;i<rows.size();i++)
System.out.println("kolon"+i+": "+rows.get(i));
// main end
在列中重复:
/*
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class DupRemove
public static void main(String...arg)
double val[]=1,4.3,5,2,4,4,4,6.5,2,2,2,2,2,3.5,3.7,4,7,8,9;
for(int i=0;i<val.length;i++)
add(val[i]);
Collections.sort(list);
System.out.println(list);
static List<Double> list=new ArrayList<>();
public static void add(double d)
if(!list.contains(d))list.add(d);
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class PointStatue
/*private static List<Double> col1 = new ArrayList<Double>();
private static List<Double> col2 = new ArrayList<Double>();
private static List<Double> col3 = new ArrayList<Double>();
private static List<Double> col4 = new ArrayList<Double>();
private static List<Double> col5 = new ArrayList<Double>();
private static List<Double> col6 = new ArrayList<Double>();
private static List<Double> col7 = new ArrayList<Double>();
private static List<Double> col8 = new ArrayList<Double>();*/
//private static List<Double> list=new ArrayList<Double>();
private static ArrayList<List<Double>> rows=new ArrayList<List<Double>>();
private static List<Double> numbers = new ArrayList<Double>();
private static void okuDiziyeKoy(String path,ArrayList<String> arr) throws Exception
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(path)));
//skip the first line
br.readLine();
String g;
while((g=br.readLine())!=null)
arr.add(g);
public static void main(String[] args) throws Exception
ArrayList<String> puan = new ArrayList<String>();
okuDiziyeKoy("C:/deneme/HW.txt", puan);
// puan = okuDiziyeKoy("C:\\deneme\\HW.txt");
System.out.format("%d kayıt okundu.%n", puan.size());
Double doubleValue;
for (int j = 0; j < 6; j++)
rows.add(new ArrayList<Double>());
for (int j = 0; j < puan.size(); j++)
String point = puan.get(j);
//split data(line) by
String[] edit = point.split("[][]");
for(int l=3;l<edit.length-1;l++)
//parsing String as double
doubleValue=Double.parseDouble(edit[l]);
//check if double value is not exist then add it to list
if(!numbers.contains(doubleValue))
numbers.add(doubleValue);
if(!rows.get(l-3).contains(doubleValue))
rows.get(l-3).add(doubleValue);
/* for (String s : edit)
String a = s.replaceAll("[\\\\-\\>\\>\\]\\[\\#\\*\\]+", "");
String b = a.replaceAll("[\\.]+", ",");
Scanner scanner = new Scanner(b);
while (scanner.hasNext())
if (scanner.hasNextDouble())
doubleValue = scanner.nextDouble();
if(!numbers.contains(doubleValue))
numbers.add(doubleValue);
// System.out.println(Arrays.deepToString(numbers.toArray()));
// if scan end
else
//if it is string comes value here
String stringValue = scanner.next();
// if scan end
// while end
// for string s
// for j end*/
Collections.sort(numbers);
System.out.println("Unique values(in all rows): ");
for(Double d :numbers)
System.out.print(d+" ");
System.out.println();
/*int col=1;
for(int i=0;i<numbers.size();i++)
Double rowValue = numbers.get(i);
switch(col)
case 1:
col1.add(rowValue);
col++;
break;
case 2:
col2.add(rowValue);
col++;
break;
case 3:
col3.add(rowValue);
col++;
break;
case 4:
col4.add(rowValue);
col++;
break;
case 5:
col5.add(rowValue);
col++;
break;
case 6:
col6.add(rowValue);
col = 1;
break;
//switch end
//for i end*/
/* Collections.sort(col1);
Collections.sort(col2);
Collections.sort(col3);
Collections.sort(col4);
Collections.sort(col5);
Collections.sort(col6);*/
/*System.out.println("kolon1 "+col1);
System.out.println("kolon2 "+col2);
System.out.println("kolon3 "+col3);
System.out.println("kolon4 "+col4);
System.out.println("kolon5 "+col5);
System.out.println("kolon6 "+col6);*/
//sorting each row
for(int i=0;i<rows.size();i++)
Collections.sort(rows.get(i));
//showing each row(array)
for(int i=0;i<rows.size();i++)
System.out.println("kolon"+(i+1)+": "+rows.get(i));
// main end
【讨论】:
我的快乐伙伴,你得到答案了吗?效果好吗?我希望没有任何问题/问题?哈利路亚 :) dude =) 你放了 n 个可隆,但如果你看我的文字,有 6 个数字。我取第一个数字,如 1.75、1.43、1.29 1.29。我把它们放在一个数组上,2。数字到另一个数组,我有 6 个数组,因为我在所有句子附近有 6 个点。然后我对它们进行排序.. 现在你拿 n kolons。但我必须拿 6 克朗,因为我只拿 6 分。我尝试应用我的代码,但我不能。对不起,伙计:(我慢慢来..非常非常感谢.. 这段代码完全按照你的意愿工作,它包含每行一个列表,你的文本文件包含 8 行,每行有 6 个点,我还将所有数字添加到numbers
列表中, 并且rows
包含每个行值的列表,在 for 循环中它检查重复然后插入,但是对于列也很容易,我也会为列添加它 :)
我更新了答案,检查第二个,一个,可能你需要这个,我希望:))
它的工作非常好 :D 你是我心目中世界上最好的编码器.. 非常感谢你 =)))) 非常感谢...以上是关于java 两个arraylist放着相同的东西,但顺序不同,怎么判断两个是不是相等的主要内容,如果未能解决你的问题,请参考以下文章
在 ArrayList 上排序,但 ArrayList 具有相同的值