面向对象——集合进阶二

目录

一、泛型

1、泛型概述:是JDK5中引入的特性,它提供了编译时类型安全检测机制

2、泛型好处: 

3、泛型类 

4、泛型方法 

5、泛型接口 

6、泛型通配符 

二、Set集合 

1、Set集合概述和特点 

2、TreeSet集合概述和特点 

3、HashSet集合概述和特点 

三、Map集合 

1、Map集合概述 

2、Map的基本功能 


一、泛型

1、泛型概述:JDK5中引入的特性,它提供了编译时类型安全检测机制

2、泛型好处: 

  • 把运行时期的问题提前到了编译期间 
  • 避免了强制类型转换

3、泛型类 

  • 格式:l修饰符 class 类名<类型> {  } 
  • 范例:
package com.gkl.service;

import java.util.ArrayList;
//泛型类
public class Generic<E> {

    ArrayList<E> arrayList = new ArrayList<>();
    private E value;

    public E getValue() {
        return value;
    }

    public void setValue(E value) {
        this.value = value;
    }

    public void Add(E value) {
        arrayList.add(value);
    }
    public void show(){
        System.out.println(arrayList);
    }
}

4、泛型方法 

  • 格式:修饰符 <类型> 返回值类型 方法名(类型 变量名) {  } 
  • 范例:
ArrayList<E> arrayList = new ArrayList<>();
public void Add(E value) {
    arrayList.add(value);
}

5、泛型接口 

泛型接口的使用方式:

  • 实现类也不给泛型 
  • 实现类确定具体的数据类型

泛型接口的定义格式:

  • 格式:修饰符 interface 接口名<类型> {  }
  • 范例:public interface Generic<T> {  } 

6、泛型通配符 

类型通配符上限:<? extends 类型> :它表示的类型是Animal或者其子类型

 

package com.gkl.test;

import com.gkl.service.Animal;
import com.gkl.service.Cat;
import com.gkl.service.Dog;
import com.gkl.service.Generic;

import java.util.Date;

public class GenericDemo {
    public static void main(String[] args) {
        Generic generic = new Generic();
        generic.setValue("gkl");
        generic.Add(generic.getValue());
        generic.setValue(new Date());
        generic.Add(generic.getValue());
        generic.setValue(123);
        generic.Add(generic.getValue());
        generic.show();
        Generic<? extends Animal> generic1 = new Generic<>();
//可以使用        generic1.Add(new Dog());
//可以使用        generic1.Add(new Cat());
//可以使用        generic1.Add(new Animal());
//不行        generic1.Add(new Object());
    }
}

类型通配符下限:<? super 类型> :它表示的类型是Animal或者其父类型

 

package com.gkl.test;

import com.gkl.service.Animal;
import com.gkl.service.Cat;
import com.gkl.service.Dog;
import com.gkl.service.Generic;

import java.util.Date;

public class GenericDemo {
    public static void main(String[] args) {
        Generic generic = new Generic();
        generic.setValue("gkl");
        generic.Add(generic.getValue());
        generic.setValue(new Date());
        generic.Add(generic.getValue());
        generic.setValue(123);
        generic.Add(generic.getValue());
        generic.show();
        Generic<? super Animal> generic2 = new Generic<>();
//不行        generic2.Add(new Dog());
//可以使用        generic2.Add(new Object());
    }
}

二、Set集合 

1、Set集合概述和特点 

  • 可以去除重复
  • 存取顺序不一致
  • 没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取,删除Set集合里面的元素 

2、TreeSet集合概述和特点 

  • 不包含重复元素的集合 
  • 没有带索引的方法
  • 可以将元素按照规则进行排序
  1.  自然排序Comparable的使用:使用空参构造创建TreeSet集合,自定义实现Comparable接口,重写里面的compareTo方法;
  2. 比较器排序Comparator的使用:lTreeSet的带参构造方法使用的比较器排序对元素进行排序的,比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare​(T o1,T o2)方法,重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写;

 实现Comparator接口:

package com.gkl.service;

import com.gkl.entity.Translation;

import java.util.Comparator;

public class TranslateComparator implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        Translation translation1=(Translation) o1;
        Translation translation2=(Translation) o2;
        if (translation1.getEnglish().compareTo(translation2.getEnglish())>0){
            return 1;
        }
        else if (translation1.getEnglish().compareTo(translation2.getEnglish())<0){
            return -1;
        }
        return 0;
    }
}

 在TreeSet中使用该比较器排序:

Set<Translation> set = new TreeSet<>(translateComparator);

3、HashSet集合概述和特点 

  • 底层数据结构是哈希表 
  • 集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
  • 没有带索引的方法,所以不能使用普通for循环遍历
  • 由于Set集合,所以元素唯一

哈希值:

  • public int hashCode​():返回对象的哈希码 
  • 一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同

三、Map集合 

1、Map集合概述 

  • Interface Map<K,V>  K:键的数据类型;V:值的数据类型 
  • 不能重复,值可以重复
  • 和值是一一对应的,每一个键只能找到自己对应的值
  • 多态的方式
  • 具体的实现类HashMap

2、Map的基本功能 

方法名说明

V put(K key,V value)

添加元素

V remove(Object key)

根据键删除键值对元素

void clear()

移除所有的键值对元素

boolean containsKey(Object key)

判断集合是否包含指定的键

boolean containsValue(Object value)

判断集合是否包含指定的值

boolean isEmpty()

判断集合是否为空

int size()

集合的长度,也就是集合中键值对的个数

Map集合的基本实现:

package com.gkl.service;

import com.gkl.entity.Translation;

import java.util.*;

public class TranslateTool {
    TranslateComparator translateComparator=new TranslateComparator();
    Map<String,Translation> map = new TreeMap(translateComparator);

    public void FirstAdd(){
        map.put("consider",new Translation("consider", "认为;考虑;体谅", "v.动词", "He was considering what to do next.他在考虑下一步怎么办。"));
        map.put("involve",new Translation("involve", "使参加;包含;牵连", "v.动词", "There was a serious incident involving a group of youths.有一起涉及一群年轻人的严重事件。"));
        map.put("function",new Translation("function", "n.功能;函数;vi.运行;起作用", "n.名词;vi.动词", "The function of the heart is to pump blood through the body.心脏的功能就是把血液输往全身。"));
        map.put("responsible",new Translation("responsible", "需负责任的;承担责任的;重要的;有责任感的", "adj.形容词", "Mike is responsible for designing the entire project.迈克负责设计全部工程。"));
        map.put("urgent",new Translation("urgent", "急迫的;紧要的", "adj.形容词", "The law is in urgent need of reform.这项法律亟待修订。"));
    }

    public Translation translate(String text) {
        TranslateTool translateTool = new TranslateTool();
        System.out.println(map);
        Set<String> set= map.keySet();
        Iterator<String> iterator = set.iterator();
        boolean flog=false;
        while (iterator.hasNext()) {
            String string = iterator.next();
            Translation translation=map.get(string);
            if (string.equals(text)) {
                return translation;
            }else {
                flog=true;
            }
        }

        if (flog){
            System.out.println("对不起,词库中没有该单词!请录入新的单词:");
            Translation translation=translateTool.JoinWord();
            map.put(text,translation);
            System.out.println(map);
            return translation;
        }
        return translateTool.translate(text);
    }

    public boolean OutSystem(String text){
        if (text.equals("退出")||text.equals("0")){
            return true;
        }
        return false;
    }

    public Translation JoinWord() {
        Translation translation = new Translation();
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入英文单词:");
        translation.setEnglish(scanner.nextLine());
        System.out.println("请输入中文单词意思:");
        translation.setChinese(scanner.nextLine());
        System.out.println("请输入单词词性:");
        translation.setPart(scanner.nextLine());
        System.out.println("请输入单词组成的例句:");
        translation.setExample(scanner.nextLine());
        return translation;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值