集合 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简化语
    •  for(String s :a){
      // 处理 s
      }
    • 集合的迭代遍历
for(Iterator<Intger>it=list.iterator;it.hasNext();){
Integer s = it.next();
}
    • for-each简化语法

      for(String s : list){
      
      }
    • foreach 语法, 对集合有要求
      • 要求集合必须实现 Iterable 接口
      • 必须是 Iterable 接口的子类,才能用foreach

       

java - day011 - 集合, ArrayList HashMap,HashSet, Iterator 接口, for-each 循环格式的更多相关文章

  1. java 数据结构(八):Iterator接口与foreach循环

    1.遍历Collection的两种方式:① 使用迭代器Iterator ② foreach循环(或增强for循环)2.java.utils包下定义的迭代器接口:Iterator2.1说明:Iterat ...

  2. java集合(2)-Collection与Iterator接口

    1 package com.j1803.collectionOfIterator; 2 import java.util.ArrayList; 3 import java.util.Collectio ...

  3. java集合 之 Collection和Iterator接口

    Collection是List,Queue和Set接口的父接口,该接口里定义的方法即可用于操作Set集合,也可以用于List和Queue集合.Collection接口里定义了如下操作元素的方法. bo ...

  4. 浅谈Java语言中ArrayList和HashSet的区别

    Java语言中ArrayList和HashSet的区别 2019-04-10   13:22:49 一.基本区别 首先一起看个实例,其代码如下: package com.MrZ_baby.com; i ...

  5. Java中如何克隆集合——ArrayList和HashSet深拷贝

    编程人员经常误用各个集合类提供的拷贝构造函数作为克隆List,Set,ArrayList,HashSet或者其他集合实现的方法.需要记住的是,Java集合的拷贝构造函数只提供浅拷贝而不是深拷贝,这意味 ...

  6. Java集合【2】--iterator接口详解

    目录 一.iterator接口介绍 二.为什么需要iterator接口 三.iterator接口相关接口 3.1 ListIterator 3.2 SpitIterator 3.2.1 SpitIte ...

  7. Java容器深入浅出之Collection与Iterator接口

    Java中用于保存对象的容器,除了数组,就是Collection和Map接口下的容器实现类了,包括用于迭代容器中对象的Iterator接口,构成了Java数据结构主体的集合体系.其中包括: 1. Co ...

  8. 【Java必修课】ArrayList与HashSet的contains方法性能比较(JMH性能测试)

    1 简介 在日常开发中,ArrayList和HashSet都是Java中很常用的集合类. ArrayList是List接口最常用的实现类: HashSet则是保存唯一元素Set的实现. 本文主要对两者 ...

  9. JAVA基础——集合——ArrayList

    ArrayList集合 ArrayList的一些方法(JDK1.8): 将指定的元素附加到列表的末尾,true:添加成功,false:添加失败: public boolean add(E e)    ...

随机推荐

  1. UCloud云盘系统安装

  2. 【k8s node断电重启】

    kubernetes断电重启 导致部分pod无法删除 dashboard上处于黄色 kubectl get处于terminate 状态 kubectl delete报错: An error occur ...

  3. C++高精度整数加减乘除模板

    其中高精度乘法通过了POJ2389,其他没有测过,不过应该是没有问题的. 其中高精度除法返回一对string,分别表示商和余数. 代码: #include <bits/stdc++.h> ...

  4. Codeforces Round #556 (Div. 2) D. Three Religions 题解 动态规划

    题目链接:http://codeforces.com/contest/1150/problem/D 题目大意: 你有一个参考串 s 和三个装载字符串的容器 vec[0..2] ,然后还有 q 次操作, ...

  5. 微软3389远程漏洞CVE-2019-0708批量检测工具

    0x001 Win下检测 https://github.com/robertdavidgraham/rdpscan C:\Users\K8team\Desktop\rdpscan-master\vs1 ...

  6. pickle.load EOFError: Ran out of input

    错误原因:pickle.loads()的次数超过了pickle.dumps()的次数 https://www.cnblogs.com/cmnz/p/6986667.html

  7. 【VS开发】从sockaddr中取得客户端或者数据源的Ip地址和端口号

    在socket编程中,服务器端accept()等待一个客户端的连接,当连接成功后,accept拷贝客户端的地址信息到sin_addr里面,我们如何从sin_addr取得此客户端的Ip地址和端口号呢? ...

  8. SQL优化——select

    MYSQL优化实施方案:https://www.cnblogs.com/clsn/p/8214048.html 对查询时经常用到的字段建立索引,如包含多个也可以构建复合索引,建立索引之后需要注意的一点 ...

  9. GWAS中的名称概念

    基因: 是指决定生物某一遗传性状的染色体DNA片段 基因型: `基因型`又称`遗传型`,是某一生物个体全部基因组合的总称.它反应生物体的遗传构成,即从双亲获得的全部基因的总和.遗传学中具体使用的基因型 ...

  10. LeetCode 515. 在每个树行中找最大值(Find Largest Value in Each Tree Row)

    515. 在每个树行中找最大值 515. Find Largest Value in Each Tree Row 题目描述 You need to find the largest value in ...