java - day011 - 集合, ArrayList HashMap,HashSet, Iterator 接口, for-each 循环格式

集合 ArrayList

丑数: 能被3,5,7整除多次,

 

ArrayList

    list 接口

            | - ArrayList

            | - LinkedList

    ArrayList 内部封装一个数组

    用数组存放数据

    默认初始容量是 10,

    放满后会新建1.5倍的长度的新数组

    之前数据复制放入新数组,之前数组释放

    数组访问效率高,任意位置都是

    但是增删数据效率可能低

 

    创建对象

           new ArrayList();

           初始容量10

 

           new ArrayList(1000);

           初始容量 指定 1000

 

    方法

           与LinkedList 相同

           没有两端操作数据的方法

           iterator();方法

                    hasNext();

                    next();

                    remove();  

            迭代器遍历期间,不能使用 list 增删数据,

            迭代期间删除必须使用 iterator.remove();

          

   HashMap  哈希表 / 散列表

             存放键值对数据

             键不重复,数据无序

                          

             作用: 用键快速查找速度

              方法:

                   put(key,value); 放入键值对数据,重复键覆盖原值

                   get(key);取键对应的值,键不存在 返回 null

                   size();键值对的数量

                   remove(key);移除键值对,返回被移除的值

                   keySet(); 把HashMap 里面所有键取出放入HashSet里面

                          

 

  •  哈希算法      

 

  1. 用数组存放数据,初始长度16

  2. 存放数据的过程: 先获得键的哈希值, key.hashCode();
  3. 用哈希值和数组长度来计算一个下标值 index
  4. 将键和值进行封装成 Entry 对象
  5. Entry 对象,放入 index 位置 

                 空位置,直接放入

                 有数据,依次用 equals() 比较键是否相等

                  找到相等的,覆盖值

                  没有相等,链表连在一起

                 负载率,加载因子到 0.75(既数据数量到数组容量的0.75)

                  新建容量翻倍的新数组

                   所有数据,重新哈希,放入新数组

 

                   jdk 1.8以后

                   链表长度到 8, 转成红黑树(二叉树结构,小的往左放,大的往右放)(比大小比键的哈希值)

                   红黑树长度减少到 6, 转成链表

                   

  • HasCode()       
  1. 从object 继承的方法
  2. 默认实现是使用内存地址值作为哈希值
  3. 可以在子类中重写这个方法, 用对象的属性数据计算哈希值

 

  • HashSet
  1. 用hashmap 放数据
  2. 数据不重复且无需
  3. 方法:
  4. add(数据)
  5. remove(数据)
  6. size()
  7. iterator() 迭代器
  •    Iterator 接口
  1. 使用集合的 iterator() 方法创建的迭代器对象,都是接口的子类型对象
  2. 迭代器使用期间,不能直接使用集合来增删数据
  3. 方法:
  4. hashNext()
  5. next()
  6. remove()
  •  Collections 工具类
  1. addAll(集合,值1,值2,值3,值4...); 集合多个添加数据
  2. sort(集合);排序   可以自己设置比较器
  3. binarySerarch(集合,目标值);  有序集合二分法查找,可以自己设置比较器
  4. swap(集合,a,b);交换a,b 位置
  • for-erch 循环
    • 是对数组遍历访问,集合迭代遍历访问的语法简化
    • for-each简化语
    • 1 for(String s :a){
      2       // 处理 s
      3 }

       

    • 集合的迭代遍历
for(Iterator<Intger>it=list.iterator;it.hasNext();){
     Integer s = it.next();
}
    • for-each简化语法
      for(String s : list){
      
      }

       

    • foreach 语法, 对集合有要求
      • 要求集合必须实现 Iterable 接口
      • 必须是 Iterable 接口的子类,才能用foreach

       

posted @ 2019-07-07 13:52  Dingzhijie  阅读(143)  评论(0编辑  收藏  举报