黑马程序员技术交流社区

标题: 关于集合的问题2 [打印本页]

作者: ぺsimon☆    时间: 2013-4-25 23:13
标题: 关于集合的问题2

  1. import java.util.*;
  2. class Person  //定义一个人的类
  3. {
  4.         private String name;
  5.         private int age;
  6.         Person(String name,int age)  //构造函数初始化       
  7.         {
  8.         this.name=name;
  9.         this.age=age;
  10.         }

  11.         public void setName(String name)  //定义一个设置人姓名的函数
  12.         {
  13.         this.name=name;
  14.         }
  15.         public String getName() //定义一个获取人姓名的函数
  16.         {
  17.         return name;
  18.         }
  19. }

  20. class Student extends Person  //定义一个学生类
  21. {
  22.         Student(String name,int age)       
  23.         {
  24.         super(name,age);
  25.         }
  26. }

  27. class StuCom implements Comparator<Student>  //定义一个比较器
  28. {
  29.         public int compare(Student s1,Student s2) //复写compare方法
  30.         {
  31.         return s1.getName().compareTo(s2.getName());
  32.         }
  33. }

  34. class FanXingDemo2
  35. {
  36.         public static void main(String[] args)
  37.         {
  38.         ArrayList<Student> st=new ArrayList<Student>(new StuCom()); //新

  39. 建一个容器

  40.         //向容器添加person对象
  41.         st.add(new Student("zhangsan01",20));
  42.         st.add(new Student("zhangsan02",21));
  43.         st.add(new Student("zhangsan03",22));
  44.         st.add(new Student("zhangsan04",23));
  45.         st.add(new Student("zhangsan05",24));
  46.         st.add(new Student("zhangsan06",25));
  47.         print(st); //调用函数输出每个人对象的姓名
  48.         }
  49.        
  50.         public static void print(ArrayList<? super Student > st)
  51.         {
  52.         Iterator<?> it=st.iterator();
  53.         while(it.hasNext())
  54.         {
  55.         System.out.println(it.next().toString());
  56.         }
  57.         }

  58.        
  59. }
复制代码
找不出来那里错了,请各位帮帮忙,错误如下
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