016_List/Set/Map

先写一下3这种遍历方法

for循环

List list = new ArrayList<>();
        list.add(new Teacher("张三",21));
        list.add(new Teacher("李四",28));
        list.add(new Teacher("王五",18));
                // for 循环
        for(int i = 0;i){
            System.out.println(list.get(i));
        }
                // 增强for :foreach+补全
                for (Object object : list) {
            System.out.println(object);
        }
                // 迭代器ITerator, 这是集合特有的
        Iterator it = list.iterator();
        while(it.hasNext()){
            Object next = it.next();
            Teacher tea = (Teacher)next;
            if(tea.getAge()<20){
                it.remove();
                System.out.println(tea);// 不合格学生
            }
        }    

List 接口

  1. ArrayList 数组结构 这是list接口的主要实现类
  2. Vector 底层也是数组,线程安全,但效率较慢
  3. LinkedList 链表结构 查询效率慢,增删块

Set

特点:无序,无下标,不重复

set没有特有的方法,都是继承于父接口

底层是通过哈希计算得出内存的地址,如果地址不同则直接赋值,如果地址相同就在看内容。

相同对象,哈希值一定相同,不同对象哈希值可能相同

①HashSet 作为主要实现类

  1. 判断hashCode(是否相同,不同直接存储,当做不重复处理)
  2. 相同时,他才会进行equals比较内容,当内容相同了,不添加

②TreeSet 实现 自然排序

  • 要求:性价到该集合里的类必须支持排序
  • 必须要实现Comparable接口否则汇报类型转换异常
  • 实现Comparable接口 要重写CompareTO()方法,确定比较的依据

定制排序

  • 1.创建一个比较器
    •   comparetor  抽象方法
    •   compare
  • 在创建  TreeSet时
    •   通过有参构造把比较器对象穿进去

自然排序和定制排序比较:

定制排序的优先级高,而且和类结耦!!!

③LinkedHashSet

基于链表的结构  多维护一层添加顺序

Map

遍历:

  所有的key

      keySet() ==> Set 集合

  所有的value

      values() ==> Collection集合

  所有的键值对

      entrySet ==> Set 集合

      在得到键值对后  键值对的类型  Map.Entry 类型

        getKey() 获取该键值对的键

        

你可能感兴趣的:(016_List/Set/Map)