304

Set次なしで/を反復するにはどうすればよいHashSetですか?

Iterator iter = set.iterator();
while (iter.hasNext()) {
    System.out.println(iter.next());
}
4

8 に答える 8

531

拡張された for ループを使用できます。

Set<String> set = new HashSet<String>();

//populate set

for (String s : set) {
    System.out.println(s);
}

または Java 8 の場合:

set.forEach(System.out::println);
于 2012-09-17T08:43:08.133 に答える
25

セットを配列に変換する と、要素を反復処理するのにも役立ちます。

Object[] array = set.toArray();

for(int i=0; i<array.length; i++)
   Object o = array[i];
于 2012-09-17T08:46:14.273 に答える
13

実証するために、さまざまな Person オブジェクトを保持する次のセットを考えてみましょう。

Set<Person> people = new HashSet<Person>();
people.add(new Person("Tharindu", 10));
people.add(new Person("Martin", 20));
people.add(new Person("Fowler", 30));

人物モデルクラス

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //TODO - getters,setters ,overridden toString & compareTo methods

}
  1. for ステートメントには、コレクションと配列を介した反復用に設計された形式があります。この形式は、拡張 for ステートメントと呼ばれることもあり、ループをよりコンパクトで読みやすくするために使用できます。
for(Person p:people){
  System.out.println(p.getName());
}
  1. Java 8 - java.lang.Iterable.forEach(消費者)
people.forEach(p -> System.out.println(p.getName()));
default void forEach(Consumer<? super T> action)

Performs the given action for each element of the Iterable until all elements have been processed or the action throws an exception. Unless otherwise specified by the implementing class, actions are performed in the order of iteration (if an iteration order is specified). Exceptions thrown by the action are relayed to the caller. Implementation Requirements:

The default implementation behaves as if: 

for (T t : this)
     action.accept(t);

Parameters: action - The action to be performed for each element

Throws: NullPointerException - if the specified action is null

Since: 1.8
于 2015-07-23T07:19:53.593 に答える
2

列挙(?):

Enumeration e = new Vector(set).elements();
while (e.hasMoreElements())
    {
        System.out.println(e.nextElement());
    }

別の方法 (java.util.Collections.enumeration()):

for (Enumeration e1 = Collections.enumeration(set); e1.hasMoreElements();)
    {
        System.out.println(e1.nextElement());
    }

Java 8:

set.forEach(element -> System.out.println(element));

また

set.stream().forEach((elem) -> {
    System.out.println(elem);
});
于 2015-06-18T11:46:12.057 に答える
0

ただし、これについては非常に優れた回答が既に用意されています。これが私の答えです:

1. set.stream().forEach(System.out::println); // It simply uses stream to display set values
2. set.forEach(System.out::println); // It uses Enhanced forEach to display set values

また、このセットがカスタム クラス タイプの場合、たとえば Customer.

Set<Customer> setCust = new HashSet<>();
    Customer c1 = new Customer(1, "Hena", 20);
    Customer c2 = new Customer(2, "Meena", 24);
    Customer c3 = new Customer(3, "Rahul", 30);

setCust.add(c1);
setCust.add(c2);
setCust.add(c3);
    setCust.forEach((k) -> System.out.println(k.getId()+" "+k.getName()+" "+k.getAge()));

// 顧客クラス:

class Customer{
private int id;
private String name;
private int age;

public Customer(int id,String name,int age){
this.id=id;
this.name=name;
this.age=age;
} // Getter, Setter methods are present.}
于 2020-04-23T16:33:37.793 に答える