在java中分别打印重复值和非重复值
我想分别打印重复值和非重复值在java中分别打印重复值和非重复值,java,printing,java-8,duplicates,printf,Java,Printing,Java 8,Duplicates,Printf,我想分别打印重复值和非重复值 String[] values= { "Java","C", "JavaScript", "JavaScript", "Java" ,"Java", "Java" , "JavaScript", "Java", "Ruby"}; 我的输出应该在下面 String[] duplicate = {"Java", "Java", "Java", "Java", "Java", "JavaScript", "JavaScript", "Java"} String[] u
String[] values= { "Java","C", "JavaScript", "JavaScript", "Java" ,"Java", "Java" , "JavaScript", "Java", "Ruby"};
我的输出应该在下面
String[] duplicate = {"Java", "Java", "Java", "Java", "Java", "JavaScript", "JavaScript", "Java"}
String[] unique = {"C", "Ruby"}
我试过几种方法,但都做不到
public static void main(String[] args) {
String[] a = { "Java","C", "JavaScript", "JavaScript", "Java" ,"Java", "Java" , "JavaScript", "Java", "Ruby"};
List<String> uniq = new ArrayList<String>();
List<String> dupe = new ArrayList<String>();
int count = 0;
for (int j = 0; j < a.length; j++) {
for (int k = j + 1; k < a.length; k++) {
if (a[j] == a[k]) {
count++;
}
}
if (count == 1){
System.out.println("Dupe: "+a[j]);
dupe.add(a[j]);
}
count = 0;
}
}
这可能对你有帮助
它表示可以使用集合创建输入数组唯一值的集合,如:
int length= a.length;
Set<String> set = new HashSet<String>();
for(int i = 0; i < length; i++){
set.add(a[i]);
}
这两个命令的最终结果都是
arrayList
只包含a
最初拥有的重复值,而set
只包含a的唯一值。您可以使用收集器在一次迭代中完成此操作。partitioning by
但返回类型将是Map
下面的代码将为您提供一个带有字符串的映射以及它出现的次数:
import java.util.HashMap;
import java.util.Map;
public class TestSample {
public static void main(String[] args) {
String[] values =
{ "Java", "C", "JavaScript", "JavaScript", "Java", "Java", "Java", "JavaScript", "Java", "Ruby" };
Map<String, Integer> decisionMap = new HashMap<>();
for (String str : values) {
if (decisionMap.containsKey(str)) {
decisionMap.put(str, decisionMap.get(str) + 1);
continue;
}
decisionMap.put(str, 0);
}
System.out.println(decisionMap.toString());
}
}
import java.util.HashMap;
导入java.util.Map;
公共类测试样本{
公共静态void main(字符串[]args){
字符串[]值=
{“Java”、“C”、“JavaScript”、“JavaScript”、“Java”、“Java”、“Java”、“JavaScript”、“Java”、“Ruby”};
Map decisionMap=newhashmap();
for(字符串str:values){
if(决策图容器(str)){
decisionMap.put(str,decisionMap.get(str)+1);
继续;
}
决策图put(str,0);
}
System.out.println(decisionMap.toString());
}
}
唯一字符串的键上将有0。
现在,您可以选择自己喜欢的打印方式。可能不是最有效的,但有一种方法:
// input: String [] a
// initialize empty:
Set<String> u = new HashSet<>(a.length);
// initialize with all values of a:
List<String> d = new ArrayList<>(Arrays.asList(a));
for(String s:a) {
if (u.add(a)) {// s is added to u for the first time:
d.remove(a);
} else { // s is duplicate in u:
u.remove(a);
}
}
String [] us = u.toArray(new String[0]);
String [] ds = d.toArray(new String[0]);
//输入:字符串[]a
//初始化为空:
Set u=新哈希集(a.长度);
//使用以下参数的所有值初始化:
列表d=新的ArrayList(Arrays.asList(a));
for(字符串s:a){
如果(u.add(a)){//s第一次添加到u:
d、 删除(a);
}否则{//s在u中重复:
u、 删除(a);
}
}
字符串[]us=u.toArray(新字符串[0]);
字符串[]ds=d.toArray(新字符串[0]);
…利用集合的特征(元素唯一性)和
set.add():布尔方法,当“集合被添加操作修改”时,该方法发出true
。要打印唯一值,可以使用收集框架
HashSet<String> h = new HashSet<String>();
//Adding elements into HashSet add()
for(int i = 0; i < length; i++)
{
h.add(a[i]); //adding element in the set
}
// Iterating over hash set items
for (String i : h)
{
System.out.println(i); //printing unique elements
}
HashSet h=newhashset();
//将元素添加到HashSet add()中
for(int i=0;i
这是另一种使用java 8的方法
public class Test {
public static void main(String[] args) {
String[] values = { "Java", "C", "JavaScript", "JavaScript", "Java", "Java", "Java", "JavaScript", "Java",
"Ruby" };
List<String> l = new LinkedList<>(Arrays.asList(values));// you can not use List<String> l = Arrays.asList(values); because we will be removing the duplicate values later so you will get java.lang.UnsupportedOperationException
Set<String> allItems = new HashSet<String>();
List<String> duplicates = Arrays.stream(values).filter(n -> !allItems.add(n)).collect(Collectors.toList());
System.out.println(duplicates);//this will print all the duplicate values
l.removeAll(duplicates);// input=duplicate+unique so removing the duplicate will give the unique values
System.out.println(l);
}
}
你知道电视机是怎么工作的吗?我建议你看看是的。但它将为所有值创建唯一的列表。但我需要单独的清单。是的,看看sets@User输出中的顺序重要吗?“通过将原始数组a转换为ArrayList”-措辞错误看起来不错,但不是最佳解决方案,因为您有O(n^2)
import java.util.HashMap;
import java.util.Map;
public class TestSample {
public static void main(String[] args) {
String[] values =
{ "Java", "C", "JavaScript", "JavaScript", "Java", "Java", "Java", "JavaScript", "Java", "Ruby" };
Map<String, Integer> decisionMap = new HashMap<>();
for (String str : values) {
if (decisionMap.containsKey(str)) {
decisionMap.put(str, decisionMap.get(str) + 1);
continue;
}
decisionMap.put(str, 0);
}
System.out.println(decisionMap.toString());
}
}
// input: String [] a
// initialize empty:
Set<String> u = new HashSet<>(a.length);
// initialize with all values of a:
List<String> d = new ArrayList<>(Arrays.asList(a));
for(String s:a) {
if (u.add(a)) {// s is added to u for the first time:
d.remove(a);
} else { // s is duplicate in u:
u.remove(a);
}
}
String [] us = u.toArray(new String[0]);
String [] ds = d.toArray(new String[0]);
HashSet<String> h = new HashSet<String>();
//Adding elements into HashSet add()
for(int i = 0; i < length; i++)
{
h.add(a[i]); //adding element in the set
}
// Iterating over hash set items
for (String i : h)
{
System.out.println(i); //printing unique elements
}
public class Test {
public static void main(String[] args) {
String[] values = { "Java", "C", "JavaScript", "JavaScript", "Java", "Java", "Java", "JavaScript", "Java",
"Ruby" };
List<String> l = new LinkedList<>(Arrays.asList(values));// you can not use List<String> l = Arrays.asList(values); because we will be removing the duplicate values later so you will get java.lang.UnsupportedOperationException
Set<String> allItems = new HashSet<String>();
List<String> duplicates = Arrays.stream(values).filter(n -> !allItems.add(n)).collect(Collectors.toList());
System.out.println(duplicates);//this will print all the duplicate values
l.removeAll(duplicates);// input=duplicate+unique so removing the duplicate will give the unique values
System.out.println(l);
}
}
[JavaScript, Java, Java, Java, JavaScript, Java]
[C, Ruby]