• 集合和泛型 二


    Set接口:

    Set接口存储一组唯一,无序的对象 HashSet是Set接口常用的实现类

    HashSet的创建及方法调用:

     1 public class TestHashSet {
     2     public static void main(String[] args){
     3         HashSet<String> hs=new HashSet<String>();
     4         hs.add("谁是第一个");
     5         hs.add("不知道");
     6         hs.add("我是第一个");
     7         System.out.println(hs);
     8         //Tterator迭代器
     9         Iterator<String> it=hs.iterator();        
    10         //判断是否有下一个元素,若有打印出来
    11         while(it.hasNext()){
    12             System.out.println(it.next());
    13         }
    14     }
    15 }

    输出结果:由结果可以看出Set集合的无序特性

    Map接口:

    Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作,最常用的实现类是HashMap

     Map接口常用方法:

    HashMap集合的创建,添加数据和遍历:

     1 public class NationalEnglish {
     2     public static void main(String[] args) {
     3         Map<String, String> m = new HashMap<String, String>();
     4         m.put("CN", "中国");
     5         m.put("USA", "美国");
     6         m.put("GY", "德国");
     7         System.out.println(m);
     8         // 使用Set集合获取key值
     9         Set<String> set = m.keySet();
    10         // 使用Iterator遍历key来获取values值
    11         Iterator<String> it = set.iterator();
    12         while (it.hasNext()) {
    13             // 打印获取的values值
    14             System.out.println(m.get(it.next()));
    15         }
    16         // 直接遍历values
    17         for (String s : m.values()) {
    18             System.out.println(s);
    19         }
    20         // 同时遍历key和value
    21         Set<Entry<String, String>> set1 = m.entrySet();
    22         for (Entry<String, String> ent : set1) {
    23             System.out.println("键值是:" + ent.getKey() + ",values是:"
    24                     + ent.getValue());
    25         }
    26     }
    27 }

    通过重写一些方法,来实现一些功能:

     1 public class Student implements Comparator<Student>{
     2     private String name;
     3     private char sex;
     4     private int age;
     5     
     6     public Student(){}
     7     public Student(String name,int age){
     8         this.name=name;        
     9         this.age=age;
    10     }
    11     //重写equals方法
    12     public boolean equals(Object obj){
    13         if(obj instanceof Student){
    14             Student stu=(Student) obj;
    15         if(this.age==stu.getAge()){
    16             return true;
    17         }else{
    18             return false;
    19         }
    20         }
    21         return false;
    22     }
    23     //重写hashCode方法
    24     public int hashCode(){
    25         return this.age;        
    26     }            
    27     public String getName() {
    28         return name;
    29     }
    30     public void setName(String name) {
    31         this.name = name;
    32     }
    33     public char getSex() {
    34         return sex;
    35     }
    36     public void setSex(char sex) {
    37         this.sex = sex;
    38     }
    39     public int getAge() {
    40         return age;
    41     }
    42     public void setAge(int age) {
    43         this.age = age;
    44     }    
    45     //按名字排序,名字相同比较年龄
    46     public int compare(Student s1, Student s2) {
    47         if(s1.getName().equals(s2.getName())){
    48             return s1.getAge()-s2.getAge();//通过比较年龄排序
    49         }else{
    50             return s1.getName().compareTo(s2.getName());
    51         }
    52     }    
    53 }
    重写equals()和hashCode()方法,来实现去除年龄重复的测试类:
     1 public class TestHashSet {
     2     public static void main(String[] args){
     3         //重写equals方法,来实现去除年龄重复的
     4         HashSet<Student> hs=new HashSet<Student>();
     5         Student s1=new Student("a",12);
     6         Student s2=new Student("b",15);
     7         Student s3=new Student("c",12);
     8         hs.add(s1);
     9         hs.add(s2);
    10         hs.add(s3);
    11         for(Student stu:hs)
    12           System.out.println("名字是:"+stu.getName()+",年龄是:"+stu.getAge());        
    13     }
    14 }

    输出结果:

    通过重写compare()方法来实现根据姓名排序,若姓名重复则根据年龄排序的测试类:

     1 public class Rewritesort {
     2     public static void main(String[] args){
     3         Student s1=new Student("小红",18);
     4         Student s2=new Student("张三",12);    
     5         Student s3=new Student("小红",15);    
     6         Student s4=new Student("a",22);    
     7         List<Student> lt=new ArrayList<Student>();
     8         lt.add(s1);
     9         lt.add(s2);
    10         lt.add(s3);    
    11         lt.add(s4);
    12         //根据姓名和年龄进行排序
    13         Collections.sort(lt,new Student());
    14         for(Student stu:lt){
    15           System.out.println(stu.getName()+"年龄是:"+stu.getAge());
    16         }                
    17     }
    18 }

     输出结果:

  • 相关阅读:
    Linux ifconfig 命令
    linux sed命令就是这么简单
    让博客园博客自动生成章节目录索引
    linux中cat、more、less命令区别详解
    Linux yum源搭建及配置
    关于java中位运算的左移、右移、无符号右移
    一个老话题,short s=s+1的日常
    C语言移位运算符
    关于异或的一些东西和应用
    指针就算指向了常量也不能修改这个常量
  • 原文地址:https://www.cnblogs.com/TFE-HardView/p/10988188.html
Copyright © 2020-2023  润新知