Java

复习JavaSE 8 9.泛型与集合

2019-03-04  本文已影响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);
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读