在Java中创建数组

3wabscal  于 4个月前  发布在  Java
关注(0)|答案(5)|浏览(33)

我是Java新手,所以我可能在这里做错了什么,我想创建一个Sets数组,我得到了一个错误(来自Eclipse)。

public class Recipient 
{
String name;
String phoneNumber;

public Recipient(String nameToSet, String phoneNumberToSet)
{
    name = nameToSet;
    phoneNumber = phoneNumberToSet;
}

void setName(String nameToSet)
{
    name = nameToSet;
}

void setPhoneNumber(String phoneNumberToSet)
{
    phoneNumber = phoneNumberToSet;
}

String getName()
{
    return name;
}

String getPhoneNumber()
{
    return phoneNumber;
}
}

字符串
我想创建一个数组

Set<Recipient>[] groupMembers = new TreeSet<Recipient>[100];


我得到的错误是“无法创建TreeSet的通用数组”
怎么了?

3j86kqsm

3j86kqsm1#

http://www.ibm.com/developerworks/java/library/j-jtp01255/index.html
你不能示例化一个泛型类型的数组(new List<String>[3]是非法的),除非类型参数是一个无界的数组(new List<?>[3]是合法的)。
你可以使用ArrayList而不是使用数组:

List<Set<Recipient>> groupMembers = new ArrayList<Set<Recipient>>();

字符串
上面的代码创建了一个包含Set<Recipient>对象的空ArrayList。您仍然需要示例化您放入ArrayList中的每个Set<Recipient>对象。

ipakzgxi

ipakzgxi2#

数组不支持泛型。请使用ArrayList

ArrayList<Set<Recipient>> groupMembers = new ArrayList<Set<Recipient>>();

字符串

tzxcd3kk

tzxcd3kk3#

你可能想考虑使用Guava的Multimap,其中键是索引。这将在你需要的时候为每个索引创建集合。
SetMultimap

SetMultimap<Integer, Recipient> groupMembers;

字符串

pb3skfrl

pb3skfrl4#

在这种特定情况下,组的数量是可变的,使用ArrayList或其他集合类型而不是数组当然更好。
但如果出于某种原因,你确实需要一个大小为100的数组,你可以这样做:

@SuppressWarnings("unchecked")
Set<Recipient>[] groupMembers = (Set<Recipient>[])new Set<?>[100];

字符串
你不应该创建一个TreeSet<?>[]并把它赋值给一个Set<?>[],因为这不是类型安全的。编译器允许在数组中存储一个HashSet,但在运行时它会被拒绝,并出现异常。
请注意,此时数组仍然为空,需要创建实际的Set:

groupMembers[0] = new TreeSet<>();
groupMembers[0].add(new Recipient("John", "123-45-67"));
groupMembers[0].add(new Recipient("Doe", "987-65-43"));

lpwwtiir

lpwwtiir5#

首先,你的语法不正确;其次,你的类必须实现Comparable接口,或者在为每个TreeSet<>赋值时传递一个Comparator。

  • 第一个集合使用XML实现的Comparable<T>接口,并根据名称进行排序。
  • 第二组使用提供的Comparator对电话号码进行排序。
class Recipient implements Comparable<Recipient> {
    String name;
    String phoneNumber;
   
    // existing code here.

    //Comparable implementation to sort on name
    @Override
    public int compareTo(Recipient r) {
        return name.compareTo(r.name);
    }
}

@SuppressWarnings("unchecked")
Set<Recipient>[] groupMembers = new TreeSet[2];

groupMembers[0] = new TreeSet<>();
groupMembers[0].add(new Recipient("Mary", "555-1212"));
groupMembers[0].add(new Recipient("Bob", "555-1213"));
groupMembers[0].add(new Recipient("John", "555-1214"));

groupMembers[1] = new TreeSet<>(Comparator.comparing(Recipient::getPhoneNumber));
groupMembers[1].add(new Recipient("Phil", "444-9999"));
groupMembers[1].add(new Recipient("Jane", "444-8888"));
groupMembers[1].add(new Recipient("Simon", "444-7777"));

for (Set<Recipient> group : groupMembers) {
    for (Recipient r : group) {
        System.out.println(r.getName() + " " + r.getPhoneNumber());
    }
    System.out.println();
}

字符串
打印(第一组按姓名排序,下一组按电话号码排序)

Bob 555-1213
John 555-1214
Mary 555-1212

Simon 444-7777
Jane 444-8888
Phil 444-9999

相关问题