[英]How to iterate a linked hashset and compare each 2 elements in a text file in java?
我在鏈接的哈希集中有一些元素。
鉛筆,鋼筆,橡皮擦,規模
首先,我要訪問(鉛筆,筆)並執行一些操作。 然后我要訪問(鉛筆,橡皮擦)然后(鉛筆,刻度),依此類推。
我編寫了可以訪問第一個兩項的代碼,但是在下一次迭代中,它訪問的是橡皮,刻度而不是鉛筆,橡皮擦。 請幫助我找出此解決方案。 謝謝。 這是到目前為止我所做的代碼的一部分:
LinkedHashSet<String> freq = new LinkedHashSet<String>();
/* Linked hashset has these items :
[pen,pencil,eraser,scale] */
String item;
String item2;
Iterator<String> itr = freq.iterator();
while (itr.hasNext()) {
item = itr.next();
System.out.println(item);
item2=itr.next();
System.out.println(item2);
// perform some task
}
我不知道我是否了解你想要的,但是想要的循環必須使用嵌套循環來完成,請考慮以下代碼:
public static void main(String[] args) {
LinkedHashSet<String> freq = new LinkedHashSet<String>();
freq.add("pen");
freq.add("pencil");
freq.add("eraser");
freq.add("scale");
for (String item : freq) {
performeOperation(item, freq);
}
}
private static void performeOperation(String primeItem, LinkedHashSet<String> freq) {
for (String secondItem : freq) {
if (primeItem != secondItem) {
System.out.println(primeItem + ", " + secondItem);
}
}
}
輸出樣本:
pen, pencil
pen, eraser
pen, scale
pencil, pen
pencil, eraser
pencil, scale
eraser, pen
eraser, pencil
eraser, scale
scale, pen
scale, pencil
scale, eraser
如果不需要重復的對,請使用以下命令:
public static void main(String[] args) {
LinkedHashSet<String> freq = new LinkedHashSet<String>();
LinkedHashSet<String> param = new LinkedHashSet<String>();
freq.add("pen");
freq.add("pencil");
freq.add("eraser");
freq.add("scale");
param.addAll(freq);
for (String item : freq) {
param.remove(item);
performeOperation(item, param);
}
}
private static void performeOperation(String primeItem, LinkedHashSet<String> param) {
for (String secondItem : param) {
System.out.println(primeItem + ", " + secondItem);
}
}
輸出樣本:
pen, pencil
pen, eraser
pen, scale
pencil, eraser
pencil, scale
eraser, scale
是的,可以使用一個LinkedHashSet
來完成,但是您必須使用LinkedHashSet
來維護元素的插入順序,這樣該解決方案才能起作用。
public static void main(String[] args) {
LinkedHashSet<String> freq = new LinkedHashSet<String>();
freq.add("pen");
freq.add("pencil");
freq.add("eraser");
freq.add("scale");
for (String item : freq) {
performeOperation(item, freq);
}
}
private static void performeOperation(String primeItem, LinkedHashSet<String> param) {
boolean flag = false;
for (String secondItem : param) {
if (flag) {
System.out.println(primeItem + ", " + secondItem);
} else if (primeItem.equals(secondItem)) {
flag = true;
}
}
}
碼:
Iterator<String> iterator = set.iterator();
String pencil = iterator.next();
while (iterator.hasNext()) {
System.out.println(pencil);
System.out.println(iterator.next());
}
輸出:
pencil
pen
pencil
eraser
pencil
scale
不確定如何使用Java中的ArrayLists進行操作,但是您可以將其從arraylist轉換為hashmap,因為您可以使用該方法對出現的次數進行計數。 這就是我會做的。
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.*;
public class Sample
{
public static void main(String []args){
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("Pencil");
arrayList.add("Pencil");
arrayList.add("Bulb");
arrayList.add("Scale");
arrayList.add("Pencil");
arrayList.add("Pencil");
arrayList.add("Scale");
arrayList.add("Eraser");
countListItems(arrayList);
}
public static void countListItems(ArrayList<String> list)
{
Map<String, Integer> map = new HashMap<String, Integer>();
for (String x : list)
{
Integer y = map.get(x);
map.put(x, (y == null) ? 1 : y + 1);
}
for (Entry<String, Integer> item : map.entrySet()) {
System.out.println(item.getKey()+" -> count="+ item.getValue());
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.