美文网首页Java
复习JavaSE 8 9.泛型与集合

复习JavaSE 8 9.泛型与集合

作者: 第二套广播体操 | 来源:发表于2019-03-04 20:39 被阅读0次

补:
Arraylist查询速度比Stream快
动态动态数组删除元素 数组长度会发生变化 故

   for (int i = 0; i <heroes.size(); i++) {
            if (i%8==0){
            heroes.remove(i);
            
            System.out.println("第"+i+"个被删除了!");}
        }

i<100 是错误的 会出现删除第96个元素的时候 而此时数组长度不够96

类型参数 使程序具有更好的可读性和安全性
ArrayList<String>String[ ]好一些 因为它可以自动扩展
泛型类
引入一个类型变量 用<>括起来
可以指定方法的返回类型 域以及局部变量的类型

class Pair<T>{
    private T first;
    private T second;

    public Pair() { first=null;second=null; }

    public Pair(T first, T second) {
        this.first = first;
        this.second = second;
    }

    public T getFirst() { return first; }

    public void setFirst(T first) { this.first = first; }

    public T getSecond() { return second; }

    public void setSecond(T second) { this.second = second; }
    
}

泛型方法:
public static <T extends Comparable> Pair<T> minmax(T[] a)
在返回值类型之前 关键词之后 定义
传入一个可以使用CompareTo() 方法类型的数组 即继承自Comparable接口

约束:
不能用基本类型实例化类型参数
运行时类型参数只适用于原始类型
不能创建类型参数化类型的数组
不能构造泛型数组
禁止使用带类型变量的静态域和方法
不能抛出或捕获泛型的实例

既能接收Manager又能接收 Employee <? extends Employee>


集合

foreach 表示同样的迭代器循环
标准类库任何集合都可以使用foreach

迭代器认为两个元素之间返回越过的那个元素
同理于InPutStream.read
调用remove 之前没有调用的next不合法

List 有序集合
迭代器访问 顺序访问 LinkedList使用高效
整数下标访问 随机访问 数组ArrayList高效

set 无需 不重复
需要定义集的equals方法 和hashcode方法


LinkedList使用ListIterator迭代器 或者使用foreach 遍历添加 删除元素
不要用get效率低 for循环效率低


sort方法排序需要覆盖compareble和comparator
所有带hash的方法 自定义类中需要覆盖hashcode和equals方法
带hash的方法的类一般都是确定唯一性 hashSet和hashMap
所有以Linked为前缀的集合都是有序集合 linked集合推荐使用迭代器iterator进行迭代

import java.util.HashMap;

/**
 * @ClssName HashMapTest
 * @Autor Yu
 * @Description TODO
 * @Date 2019/3/6 21:31
 * Version 1.0
 * 利用hashMap计算一个字符串每个字符出现的次数  遍历字符串得到每个字符 次数放在值处
 */
public class HashMapTest {
    public static void main(String[] args) {
        String s = "aaabbbcca";
//        转换成字节数组
        char[] chars = s.toCharArray();
//        创建hashMap集合
        HashMap<Character, Integer> map = new HashMap<>();
//        遍历数组元素
        for (char c : chars) {
//            如果不包含元素 则向集合中添加
            if (!map.containsKey(c)) {
                map.put(c, 1);
            } else {
//                获取值
                Integer time = map.get(c);
//                值加1次 先++再赋值
                map.put(c, ++time);
            }
        }
        for (Character character : map.keySet()) {
//            通过每一个键找到值
            Integer value = map.get(character);
            System.out.println("字母: " + character + " 次数: " + value);
        }
    }
}

相关文章

  • 复习JavaSE 8 9.泛型与集合

    补:Arraylist查询速度比Stream快动态动态数组删除元素 数组长度会发生变化 故 i<100 是错误的 ...

  • Java 学习路线

    JavaSE 基础语法 面向对象 异常处理 常用类(包装类、String) 集合框架及泛型 IO 流 多线程 网络...

  • 泛型集合与非泛型集合,泛型

    ArrayList//非泛型集合 非泛型集合添加元素演示 public void Test1(){ ArrayLi...

  • 14 泛型

    14.1 泛型与集合 JDK1.5增加了泛型支持。增加泛型后的集合,可以让代码更加简洁,程序更加健壮。Ja...

  • C#基础提升系列——C#集合

    C#集合 有两种主要的集合类型:泛型集合和非泛型集合。 泛型集合被添加在 .NET Framework 2.0 中...

  • JavaSE Day13 泛型集合

    1. 什么是泛型?(很经典的总结,重要) 将类型变成参数,提高代码的复用率 2. 有泛型类型 Box,那么 ...

  • JavaSE Day14 泛型集合

    1. Java 集合中的 trimToSize() 和 ensureCapacity(int minCapacit...

  • JavaSE Day15 泛型集合

    1. 泛型的使用限制?(暂时只要了解) 2. Supplier 有什么用? 可以实现短路功能(类似于 && 或者 ...

  • TS 笔记九 泛型

    参考C# 泛型 泛型与非泛型集合[https://www.jianshu.com/p/e45e7573f928] ...

  • Java—泛型详解和使用

    1 泛型介绍 1.1 泛型的出现   泛型的出现还得从集合说起,没有泛型的时候,我们将一个对象存入集合时,集合不c...

网友评论

    本文标题:复习JavaSE 8 9.泛型与集合

    本文链接:https://www.haomeiwen.com/subject/uujwuqtx.html