Java ArrayList的铸造<;对象>;给我自己的班级
我有两个ArrayList,teamList1和teamList2,每个都包含五个团队对象。我用一种方法将这些内容相互比较。我必须将这两个ArrayList作为单个2元素简单数组参数Objects[]传递到方法中。我遇到了一个编译器错误,因为我正在努力将类型对象转换为类型团队。换句话说,从集合更改为简单数组再更改为集合会给我带来一个错误。有人知道我选角的错误吗 CommonElements.javaJava ArrayList的铸造<;对象>;给我自己的班级,java,arraylist,Java,Arraylist,我有两个ArrayList,teamList1和teamList2,每个都包含五个团队对象。我用一种方法将这些内容相互比较。我必须将这两个ArrayList作为单个2元素简单数组参数Objects[]传递到方法中。我遇到了一个编译器错误,因为我正在努力将类型对象转换为类型团队。换句话说,从集合更改为简单数组再更改为集合会给我带来一个错误。有人知道我选角的错误吗 CommonElements.java package test; import javax.swing.*; import java
package test;
import javax.swing.*;
import java.util.*;
public class CommonElements {
List<Comparable> teamList1 = new ArrayList<Comparable>();
List<Comparable> teamList2 = new ArrayList<Comparable>();
List<Comparable> commonList = new ArrayList<Comparable>();
Object[] listCollection = new Object[2];
int comparisonCount;
public static void main(String[] args) {
new CommonElements();
}
public CommonElements() {
comparisonCount = 0;
Team a = new Team("Boston");
Team b = new Team("Seattle");
Team c = new Team("Newark");
Team d = new Team("Houston");
Team e = new Team("Salt Lske City");
teamList1.add(a);
teamList1.add(b);
teamList1.add(c);
teamList1.add(d);
teamList1.add(e);
Team f = new Team("Seattle");
Team g = new Team("Nashville");
Team h = new Team("St. Louis");
Team i = new Team("New York");
Team j = new Team("Boston");
teamList2.add(f);
teamList2.add(g);
teamList2.add(h);
teamList2.add(i);
teamList2.add(j);
listCollection[0] = teamList1;
listCollection[1] = teamList2;
findCommonElements(listCollection);
System.out.println(comparisonCount);
}
public Comparable[] findCommonElements(Object[] collections)
{
ArrayList<Object> objectTeam1 = new ArrayList<Object>(Arrays.asList(collections[0]));
ArrayList<Object> objectTeam2 = new ArrayList<Object>(Arrays.asList(collections[1]));
ArrayList<Team> team1 = (ArrayList)objectTeam1;
ArrayList<Team> team2 = (ArrayList)objectTeam2;
Team[] commonList = new Team[5];
int i = 0;
for(Team x:team1)
{
for(Team y:team2)
{
comparisonCount++;
if(x.compareTo(y) == 0)
{
commonList[i] = x;
System.out.println(commonList[i].teamName);
i++;
break; /*to ensure it looks for only one match per entry*/
}
}
}
return commonList;
}
public int getComparisons()
{
return comparisonCount;
}
}
package test;
public class Team implements Comparable<Team> {
String teamName = new String();
public void setName ( String n ) {
teamName = n;
}
public Team(String n) {
setName(n);
}
public int compareTo(Team x)
{
if(this.teamName.equals(x.teamName))
{
return 0;
}
else
{
return -1;
}
}
}
封装测试;
导入javax.swing.*;
导入java.util.*;
公共类公共元素{
List teamList1=new ArrayList();
List teamList2=new ArrayList();
List commonList=new ArrayList();
Object[]listCollection=新对象[2];
整数比较计数;
公共静态void main(字符串[]args){
新元素();
}
公共元素(){
comparisonCount=0;
团队a=新团队(“波士顿”);
团队b=新团队(“西雅图”);
团队c=新团队(“纽瓦克”);
d队=新队(“休斯顿”);
团队e=新团队(“盐城”);
团队列表1.添加(a);
团队列表1.添加(b);
团队列表1.添加(c);
团队列表1.添加(d);
团队列表1.添加(e);
团队f=新团队(“西雅图”);
团队g=新团队(“纳什维尔”);
团队h=新团队(“圣路易斯”);
第一队=新队(“纽约”);
团队j=新团队(“波士顿”);
团队列表2.添加(f);
团队列表2.添加(g);
团队列表2.添加(h);
团队列表2.添加(i);
团队列表2.添加(j);
listCollection[0]=teamList1;
listCollection[1]=teamList2;
findCommonElements(listCollection);
系统输出打印项次(比较项次);
}
公共可比[]findCommonElements(对象[]集合)
{
ArrayList objectTeam1=新的ArrayList(Arrays.asList(集合[0]);
ArrayList objectTeam2=新的ArrayList(Arrays.asList(collections[1]);
ArrayList team1=(ArrayList)objectTeam1;
ArrayList team2=(ArrayList)objectTeam2;
团队[]commonList=新团队[5];
int i=0;
对于(第x组:第1组)
{
对于(y组:第2组)
{
comparisonCount++;
如果(x.compareTo(y)==0)
{
公共列表[i]=x;
System.out.println(commonList[i].teamName);
i++;
中断;/*以确保每个条目只查找一个匹配项*/
}
}
}
返回公共列表;
}
公共整数比较()
{
返回比较计数;
}
}
Team.java
package test;
import javax.swing.*;
import java.util.*;
public class CommonElements {
List<Comparable> teamList1 = new ArrayList<Comparable>();
List<Comparable> teamList2 = new ArrayList<Comparable>();
List<Comparable> commonList = new ArrayList<Comparable>();
Object[] listCollection = new Object[2];
int comparisonCount;
public static void main(String[] args) {
new CommonElements();
}
public CommonElements() {
comparisonCount = 0;
Team a = new Team("Boston");
Team b = new Team("Seattle");
Team c = new Team("Newark");
Team d = new Team("Houston");
Team e = new Team("Salt Lske City");
teamList1.add(a);
teamList1.add(b);
teamList1.add(c);
teamList1.add(d);
teamList1.add(e);
Team f = new Team("Seattle");
Team g = new Team("Nashville");
Team h = new Team("St. Louis");
Team i = new Team("New York");
Team j = new Team("Boston");
teamList2.add(f);
teamList2.add(g);
teamList2.add(h);
teamList2.add(i);
teamList2.add(j);
listCollection[0] = teamList1;
listCollection[1] = teamList2;
findCommonElements(listCollection);
System.out.println(comparisonCount);
}
public Comparable[] findCommonElements(Object[] collections)
{
ArrayList<Object> objectTeam1 = new ArrayList<Object>(Arrays.asList(collections[0]));
ArrayList<Object> objectTeam2 = new ArrayList<Object>(Arrays.asList(collections[1]));
ArrayList<Team> team1 = (ArrayList)objectTeam1;
ArrayList<Team> team2 = (ArrayList)objectTeam2;
Team[] commonList = new Team[5];
int i = 0;
for(Team x:team1)
{
for(Team y:team2)
{
comparisonCount++;
if(x.compareTo(y) == 0)
{
commonList[i] = x;
System.out.println(commonList[i].teamName);
i++;
break; /*to ensure it looks for only one match per entry*/
}
}
}
return commonList;
}
public int getComparisons()
{
return comparisonCount;
}
}
package test;
public class Team implements Comparable<Team> {
String teamName = new String();
public void setName ( String n ) {
teamName = n;
}
public Team(String n) {
setName(n);
}
public int compareTo(Team x)
{
if(this.teamName.equals(x.teamName))
{
return 0;
}
else
{
return -1;
}
}
}
封装测试;
公共类团队实现了可比较的{
String teamName=新字符串();
公共void集合名(字符串n){
团队名称=n;
}
公共团队(字符串n){
集合名(n);
}
公共int比较(团队x)
{
if(this.teamName.equals(x.teamName))
{
返回0;
}
其他的
{
返回-1;
}
}
}
这是一种非常不幸和奇怪的参数传递方式,但无论如何,要使其工作,您可以:
@SuppressWarnings("unchecked")
ArrayList<Team> team1 = (ArrayList<Team>)collections[0];
@SuppressWarnings("unchecked")
ArrayList<Team> team2 = (ArrayList<Team>)collections[1];
您可以简单地执行以下操作:
teamList1.add(new Team("Boston"));
您不需要单独创建listCollection
数组,因为在传递参数时可以内联创建它:
findCommonElements(new Object[] { teamList1, teamList2 });
在团队课程中,这是:
String teamName = new String();
应该是:
String teamName;
在您的compareTo方法中:
public int compareTo(Team x)
{
if(this.teamName.equals(x.teamName))
{
return 0;
}
else
{
return -1;
}
}
这应该是:
public int compareTo(Team x)
{
return teamName.compareTo(x.teamName);
}
对于所有的x和y,这是一种非常不幸和奇怪的传递参数的方式,但无论如何,要使其工作,您可以:
@SuppressWarnings("unchecked")
ArrayList<Team> team1 = (ArrayList<Team>)collections[0];
@SuppressWarnings("unchecked")
ArrayList<Team> team2 = (ArrayList<Team>)collections[1];
您可以简单地执行以下操作:
teamList1.add(new Team("Boston"));
您不需要单独创建listCollection
数组,因为在传递参数时可以内联创建它:
findCommonElements(new Object[] { teamList1, teamList2 });
在团队课程中,这是:
String teamName = new String();
应该是:
String teamName;
在您的compareTo方法中:
public int compareTo(Team x)
{
if(this.teamName.equals(x.teamName))
{
return 0;
}
else
{
return -1;
}
}
这应该是:
public int compareTo(Team x)
{
return teamName.compareTo(x.teamName);
}
对于所有的x和y,这是一种非常不幸和奇怪的传递参数的方式,但无论如何,要使其工作,您可以:
@SuppressWarnings("unchecked")
ArrayList<Team> team1 = (ArrayList<Team>)collections[0];
@SuppressWarnings("unchecked")
ArrayList<Team> team2 = (ArrayList<Team>)collections[1];
您可以简单地执行以下操作:
teamList1.add(new Team("Boston"));
您不需要单独创建listCollection
数组,因为在传递参数时可以内联创建它:
findCommonElements(new Object[] { teamList1, teamList2 });
在团队课程中,这是:
String teamName = new String();
应该是:
String teamName;
在您的compareTo方法中:
public int compareTo(Team x)
{
if(this.teamName.equals(x.teamName))
{
return 0;
}
else
{
return -1;
}
}
这应该是:
public int compareTo(Team x)
{
return teamName.compareTo(x.teamName);
}
对于所有的x和y,这是一种非常不幸和奇怪的传递参数的方式,但无论如何,要使其工作,您可以:
@SuppressWarnings("unchecked")
ArrayList<Team> team1 = (ArrayList<Team>)collections[0];
@SuppressWarnings("unchecked")
ArrayList<Team> team2 = (ArrayList<Team>)collections[1];
您可以简单地执行以下操作:
teamList1.add(new Team("Boston"));
您不需要单独创建listCollection
数组,因为在传递参数时可以内联创建它:
findCommonElements(new Object[] { teamList1, teamList2 });
在团队课程中,这是:
String teamName = new String();
应该是:
String teamName;
在您的compareTo方法中:
public int compareTo(Team x)
{
if(this.teamName.equals(x.teamName))
{
return 0;
}
else
{
return -1;
}
}
这应该是:
public int compareTo(Team x)
{
return teamName.compareTo(x.teamName);
}
它较短,并且对所有x和y的
sgn(x.compareTo(y))==-sgn(y.compareTo(x))
表示敬意。欢迎使用堆栈溢出。你能发布错误日志吗@Shampouya你不能将泛型(我不相信),例如ArrayList
转换为ArrayList
…我不明白为什么这里有必要这样做。您有一个可比较的
对象数组,那么为什么不让您的比较元素
方法取而代之的是一个可比较的
对象数组,而不进行任何强制转换呢?欢迎使用堆栈溢出。你能发布错误日志吗@Shampouya你不能将泛型(我不相信),例如ArrayList
转换为ArrayList
…我不明白为什么会这样