Java—将ConcurrentHashMap添加到JList的正确方法?

Java—将ConcurrentHashMap添加到JList的正确方法?,java,thread-safety,jlist,Java,Thread Safety,Jlist,下面是我的示例代码: 人员类别: public class Person { private String firstName; private String lastName; @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((firstName == null) ? 0 : first

下面是我的示例代码:

人员类别:

public class Person {



private String firstName;
private String lastName;



@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result
            + ((firstName == null) ? 0 : firstName.hashCode());
    result = prime * result
            + ((lastName == null) ? 0 : lastName.hashCode());
    return result;
}



@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Person other = (Person) obj;
    if (firstName == null) {
        if (other.firstName != null)
            return false;
    } else if (!firstName.equals(other.firstName))
        return false;
    if (lastName == null) {
        if (other.lastName != null)
            return false;
    } else if (!lastName.equals(other.lastName))
        return false;
    return true;
}



public Person(String firstName,String lastName){

    this.setFirstName(firstName);
    this.setLastName(lastName);
}



public String getFirstName() {
    return firstName;
}



private void setFirstName(String firstName) {
    this.firstName = firstName;
}



public String getLastName() {
    return lastName;
}



private void setLastName(String lastName) {
    this.lastName = lastName;
}
}

测试/主要:

ConcurrentHashMap<Integer,Person> storage = new ConcurrentHashMap<Integer, Person>();
    storage.put(1, new Person("Sally","Solomon"));
    storage.put(2, new Person("Harry","Solomon"));

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JButton jButton1 = new JButton("Button");


    Person [] personArr= storage.values().toArray(new Person[0]);
    String [] names = new String[personArr.length];

    System.out.println(personArr.length);

    for(int i=0; i<personArr.length; i++){
        System.out.println(personArr[i].getFirstName());
        names[i] = personArr[i].getFirstName() + " " + personArr[i].getLastName();
    }



    final JList jList1 = new JList(names);
问题: 在ConcurrectHashMap中获取值并将其添加到JList的正确方法是什么?我的方法是将所有值读入一个字符串数组,并将其添加到JList中

能更有效地完成吗? 他们这样做安全吗?还是只更新存储并将其添加到JList? Per:

类似地,迭代器和枚举返回反映哈希表在迭代器/枚举创建时或创建之后某个点的状态的元素。它们不会抛出ConcurrentModificationException。但是,迭代器设计为一次只能由一个线程使用

因此,如果您是唯一一个在地图上迭代的人,那么即使另一个线程正在更新它,您也很好。但是请注意,在使用Swing时,线程安全主要是在访问GUI小部件时提到的——它必须从事件调度线程完成。
因此,上面的代码应该从一个可运行的数据库运行,并传递到

谢谢。我应该如何运行EventQueueinvokeLater?请原谅,我只是Java.EventQueue.invokeLater new Runnable{@Override public void run{yourCodeHere}的初学者;为了澄清一下,我应该在yourCodeHere部分中放置什么代码?您的整个测试/主要测试。或者至少从JFRAME开始的部分。。。在…上