黑马程序员技术交流社区
标题: 关于集合的问题2 [打印本页]
作者: ぺsimon☆ 时间: 2013-4-25 23:13
标题: 关于集合的问题2
- import java.util.*;
- class Person //定义一个人的类
- {
- private String name;
- private int age;
- Person(String name,int age) //构造函数初始化
- {
- this.name=name;
- this.age=age;
- }
- public void setName(String name) //定义一个设置人姓名的函数
- {
- this.name=name;
- }
- public String getName() //定义一个获取人姓名的函数
- {
- return name;
- }
- }
- class Student extends Person //定义一个学生类
- {
- Student(String name,int age)
- {
- super(name,age);
- }
- }
- class StuCom implements Comparator<Student> //定义一个比较器
- {
- public int compare(Student s1,Student s2) //复写compare方法
- {
- return s1.getName().compareTo(s2.getName());
- }
- }
- class FanXingDemo2
- {
- public static void main(String[] args)
- {
- ArrayList<Student> st=new ArrayList<Student>(new StuCom()); //新
- 建一个容器
- //向容器添加person对象
- st.add(new Student("zhangsan01",20));
- st.add(new Student("zhangsan02",21));
- st.add(new Student("zhangsan03",22));
- st.add(new Student("zhangsan04",23));
- st.add(new Student("zhangsan05",24));
- st.add(new Student("zhangsan06",25));
- print(st); //调用函数输出每个人对象的姓名
- }
-
- public static void print(ArrayList<? super Student > st)
- {
- Iterator<?> it=st.iterator();
- while(it.hasNext())
- {
- System.out.println(it.next().toString());
- }
- }
-
- }
复制代码 找不出来那里错了,请各位帮帮忙,错误如下
ArrayList<Student> st=new ArrayList<Student>(new StuCom()); //新建一个容
作者: wangyougu010 时间: 2013-4-25 23:32
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
class Person // 定义一个人的类
{
private String name;
@Override
public String toString() { //标号(1) 需要重写Object类的toString方法,以便能按照我们自己希望的输出相关属性
// TODO Auto-generated method stub
return "姓名:" + name;
}
private int age;
Person(String name, int age) // 构造函数初始化
{
this.name = name;
this.age = age;
}
public void setName(String name) // 定义一个设置人姓名的函数
{
this.name = name;
}
public String getName() // 定义一个获取人姓名的函数
{
return name;
}
}
class Student extends Person // 定义一个学生类
{
Student(String name, int age) {
super(name, age);
}
}
class StuCom implements Comparator<Student> // 定义一个比较器
{
public int compare(Student s1, Student s2) // 复写compare方法
{
return s1.getName().compareTo(s2.getName());
}
}
class FanXingDemo2 {
public static void main(String[] args)
{
ArrayList<Student> st=new ArrayList<Student>(); // 标号(2) 新建一个容器,容器转入的Student对象
//向容器添加person对象
st.add(new Student("zhangsan01",20));
st.add(new Student("zhangsan02",21));
st.add(new Student("zhangsan03",22));
st.add(new Student("zhangsan04",23));
st.add(new Student("zhangsan05",24));
st.add(new Student("zhangsan06",25));
print(st); //调用函数输出每个人对象的姓名
}
public static void print(ArrayList<Student> st) {
Iterator<Student> it = st.iterator();// 标号(3) 迭代器的泛型是Student
while (it.hasNext()) {
System.out.println(it.next());
}
}
三个错误的地方都加了标号
作者: harborbest 时间: 2013-4-25 23:37
ArrayList<Student> st=new ArrayList<Student>(new StuCom());
ArrayList构造方法摘要
ArrayList()
构造一个初始容量为 10 的空列表。
ArrayList(Collection<? extends E> c)
构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
ArrayList(int initialCapacity)
构造一个具有指定初始容量的空列表。
遇到问题多查一下API
作者: ぺsimon☆ 时间: 2013-4-26 00:22
wangyougu010 发表于 2013-4-25 23:32
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
ArrayList<Student> st=new ArrayList<Student>(); // 标号(2) 新建一个容器,容器转入的Student对象
这句话不是跟我写的是一样吗
作者: wangyougu010 时间: 2013-4-26 20:44
ぺsimon☆ 发表于 2013-4-26 00:22
ArrayList st=new ArrayList(); // 标号(2) ...
你在里面还new了个对象
作者: 黄玉昆 时间: 2013-4-27 20:10
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
作者: 花伟昌 时间: 2013-4-27 22:15
import java.util.*;
class Person //定义一个人的类----------->Person类不具有比较性,所以要实现Comparable接口并覆写CompareTo()方法。
{
private String name;
private int age;
Person(String name,int age) //构造函数初始化
{
this.name=name;
this.age=age;
}
public void setName(String name) //定义一个设置人姓名的函数
{
this.name=name;
}
public String getName() //定义一个获取人姓名的函数
{
return name;
}
}
class Student extends Person //定义一个学生类
{
Student(String name,int age)
{
super(name,age);
}
}
class StuCom implements Comparator<Student> //定义一个比较器
{
public int compare(Student s1,Student s2) //复写compare方法
{
return s1.getName().compareTo(s2.getName());
}
}
class FanXingDemo2
{
public static void main(String[] args)
{
ArrayList<Student> st=new ArrayList<Student>(new StuCom()); //ArrayList集合的构造函数中,并没有定义可以将比较器作为参数传入,所以这里不能加比较器。
建一个容器
//向容器添加person对象
st.add(new Student("zhangsan01",20));
st.add(new Student("zhangsan02",21));
st.add(new Student("zhangsan03",22));
st.add(new Student("zhangsan04",23));
st.add(new Student("zhangsan05",24));
st.add(new Student("zhangsan06",25));
print(st); //调用函数输出每个人对象的姓名
}
public static void print(ArrayList<? super Student > st)
{
Iterator<?> it=st.iterator()
while(it.hasNext())
{
System.out.println(it.next().toString());
}
}
}
ArrayList的构造函数:
ArrayList()
构造一个初始容量为 10 的空列表。 |
ArrayList(Collection<? extends E> c)
构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。 |
ArrayList(int initialCapacity)
构造一个具有指定初始容量的空列表。
如果想对姓名或年龄进行排序,可以使用Collections工具类中的sort()方法,进行自然排序或自定义比较器作为参数传给sort()方法。
还有一点要注意的是,因为你在集合中存储了自定义对象,所以要对这些对象进行比较,还需要实现Comparable接口,并覆写其中的CompareTo()方法,
这样自定义对象才会具有比较性。
|
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |