在Java中创建数组

3wabscal  于 2024-01-05  发布在  Java
关注(0)|答案(5)|浏览(175)

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

  1. public class Recipient
  2. {
  3. String name;
  4. String phoneNumber;
  5. public Recipient(String nameToSet, String phoneNumberToSet)
  6. {
  7. name = nameToSet;
  8. phoneNumber = phoneNumberToSet;
  9. }
  10. void setName(String nameToSet)
  11. {
  12. name = nameToSet;
  13. }
  14. void setPhoneNumber(String phoneNumberToSet)
  15. {
  16. phoneNumber = phoneNumberToSet;
  17. }
  18. String getName()
  19. {
  20. return name;
  21. }
  22. String getPhoneNumber()
  23. {
  24. return phoneNumber;
  25. }
  26. }

字符串
我想创建一个数组

  1. 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而不是使用数组:

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

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

ipakzgxi

ipakzgxi2#

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

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

字符串

tzxcd3kk

tzxcd3kk3#

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

  1. SetMultimap<Integer, Recipient> groupMembers;

字符串

pb3skfrl

pb3skfrl4#

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

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

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

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

lpwwtiir

lpwwtiir5#

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

  • 第一个集合使用XML实现的Comparable<T>接口,并根据名称进行排序。
  • 第二组使用提供的Comparator对电话号码进行排序。
  1. class Recipient implements Comparable<Recipient> {
  2. String name;
  3. String phoneNumber;
  4. // existing code here.
  5. //Comparable implementation to sort on name
  6. @Override
  7. public int compareTo(Recipient r) {
  8. return name.compareTo(r.name);
  9. }
  10. }
  11. @SuppressWarnings("unchecked")
  12. Set<Recipient>[] groupMembers = new TreeSet[2];
  13. groupMembers[0] = new TreeSet<>();
  14. groupMembers[0].add(new Recipient("Mary", "555-1212"));
  15. groupMembers[0].add(new Recipient("Bob", "555-1213"));
  16. groupMembers[0].add(new Recipient("John", "555-1214"));
  17. groupMembers[1] = new TreeSet<>(Comparator.comparing(Recipient::getPhoneNumber));
  18. groupMembers[1].add(new Recipient("Phil", "444-9999"));
  19. groupMembers[1].add(new Recipient("Jane", "444-8888"));
  20. groupMembers[1].add(new Recipient("Simon", "444-7777"));
  21. for (Set<Recipient> group : groupMembers) {
  22. for (Recipient r : group) {
  23. System.out.println(r.getName() + " " + r.getPhoneNumber());
  24. }
  25. System.out.println();
  26. }

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

  1. Bob 555-1213
  2. John 555-1214
  3. Mary 555-1212
  4. Simon 444-7777
  5. Jane 444-8888
  6. Phil 444-9999

展开查看全部

相关问题