zoukankan      html  css  js  c++  java
  • Java基础之集合框架——使用集合Vector<>挑选演员(TryVector)

    控制台程序。

     1 public class Person implements Comparable<Person> {
     2   // Constructor
     3   public Person(String firstName, String surname) {
     4     this.firstName = firstName;
     5     this.surname = surname;
     6   }
     7 
     8   @Override
     9   public String toString() {
    10     return firstName + " " + surname;
    11   }
    12 
    13   // Compare Person objects
    14   public int compareTo(Person person) {
    15     int result = surname.compareTo(person.surname);
    16     return result == 0 ? firstName.compareTo(person.firstName) : result;
    17   }
    18 
    19   private String firstName;            // First name of person
    20   private String surname;              // Second name of person
    21 }

     使用sort()方法对列表排序时,必须通过某种方式确定列表中对象的顺序。最合适的方式就是在Person类中实现Comparable<>接口。Comparable<>只声明了comparableTo()方法。

    如果集合中存储的对象的类型实现了Comparable<>接口,就可以把集合对象作为参数传送给sort()方法。

     1 import java.util.Vector;
     2 import java.util.ListIterator;
     3 import java.util.Collections;
     4 import java.io.*;
     5 
     6 public class TryVector {
     7   public static void main(String[] args) {
     8     Person aPerson = null;                                             // A person object
     9     Vector<Person> filmCast = new Vector<>();
    10 
    11     // Populate the film cast
    12     while(true) {                                                      // Indefinite loop
    13       aPerson = readPerson();                                          // Read in a film star
    14       if(aPerson == null) {                                            // If null obtained...
    15         break;                                                         // We are done...
    16       }
    17       filmCast.add(aPerson);                                           // Otherwise, add to the cast
    18     }
    19 
    20     int count = filmCast.size();
    21     System.out.println("You added " + count + (count == 1 ? " person":  " people") + " to the cast:");
    22     // Show who is in the cast using an iterator
    23     ListIterator<Person> thisLot = filmCast.listIterator();
    24 
    25     while(thisLot.hasNext()) {       // Output all elements
    26       System.out.println( thisLot.next());
    27     }
    28     System.out.println("
    The vector currently has room for " + (filmCast.capacity() - count) + " more people.");
    29 
    30     // Now sort the vector contents and list it
    31     Collections.sort(filmCast);
    32     System.out.println("
    The cast in ascending sequence is:");
    33     for(Person person : filmCast) {
    34       System.out.println(person);
    35     }
    36   }
    37 
    38   // Read a person from the keyboard
    39   static Person readPerson() {
    40     // Read in the first name and remove blanks front and back
    41     String firstName = null;
    42     String surname = null;
    43     System.out.println("
    Enter first name or ! to end:");
    44     try {
    45       firstName = keyboard.readLine().trim();                          // Read and trim a string
    46 
    47       if(firstName.charAt(0) == '!') {                                 // Check for ! entered
    48         return null;                                                   // If so, we are done...
    49       }
    50 
    51       // Read in the surname, also trimming blanks
    52       System.out.println("Enter surname:");
    53       surname = keyboard.readLine().trim();                            // Read and trim a string
    54     } catch(IOException e) {
    55       System.err.println("Error reading a name.");
    56       e.printStackTrace();
    57       System.exit(1);
    58     }
    59     return new Person(firstName,surname);
    60   }
    61 
    62 
    63   static BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
    64 }

    把filmCast对象传送给Collections类的sort()静态方法,就会导致对集合中的对象排序。

    键盘对象是InputStreamReader对象中封装的System.in,而InputStreamReader对象封装在BufferedReader对象中。InputStreamReader对象可以把输入从字节流System.in转换为字符。BufferedReader对象缓存了从InputStreamReader读入的数据。因为输入包含一系列字符串,而每个字符串占一行,所以readLine()方法可以完成我们需要的工作。

  • 相关阅读:
    Happy New Year
    CF1450G
    理希的NOI2020退役记
    luoguP4859 已经没有什么好害怕的了(二项式反演)
    知识点简单总结——二项式反演
    bzoj4671 异或图(斯特林反演,线性基)
    知识点简单总结——斯特林数、斯特林反演
    uoj450 【集训队作业2018】复读机(生成函数,单位根反演)
    有标号DAG计数(生成函数)
    知识点简单总结——单位根反演
  • 原文地址:https://www.cnblogs.com/mannixiang/p/3430289.html
Copyright © 2011-2022 走看看