栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java集合框架

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java集合框架

java集合框架

文章目录
  • java集合框架
          • 本期内容
            • 集合类图
          • List集合
          • 扩容:
          • 实现:
            • ArrayList
            • LinkedList
            • Vector
            • CopyOnWriteArrayList
          • ArrayList remove 的注意点
            • 列举:
            • 特点:
            • 思考:
            • 遍历:
            • 初始容量16,负载因子0.75,扩容增量1倍
            • 实现:
          • TreeSet
          • Map
            • 特点:
            • 遍历:
            • 实现:
            • HashMap
            • put执行过程 图:
            • 链表结构示意图:
            • 红黑树结构示意图:
            • HashTable:
            • ConcurrentHashMap:
            • TreeMap:
            • LinkedHashMap:
            • 排序:
            • 工具类:
            • Collections
            • Arrays
          • jdk8:stream
            • 介绍
            • jdk8添加的一个新的功能,称之为流,可以以声明的方式来处理数据,提供一种对 Java 集合运算的方便处理方式
            • 特点
          • 操作
            • 中间操作(Intermediate)
            • 最终操作(Terminal)
            • 特点:
            • ⭐⭐⭐⭐⭐本期类容到此结束⭐⭐⭐⭐⭐

本期内容 集合类图

List集合
  • 特点:元素有序,且可重复

  • 遍历:下标,foreach,迭代器

扩容:
  • 初始容量10,负载因子0.5,扩容增量0.5倍
  • 新容量 = 原容量 + 原容量 * 0.5 , 如 ArrayList的容量为10,一次扩容后是容量为15
实现: ArrayList

​ 简单数据结构,超出容量自动扩容,动态数组
​ 内部实现是基于基础的对象数组的
​ 随机访问快
​ 不适合随机增加或删除
​ 线程不安全

LinkedList

​ LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部
​ 线程不安全
​ LinkedList可被用作堆栈(stack)【包括了push,pop方法】,队列(queue)或双向队列(deque)
​ 以双向链表实现,链表无容量限制,允许元素为null,线程不安全
​ 适合做随机的增加或删除

Vector

​ 线程安全
但行性能慢,不建议使用

CopyOnWriteArrayList

​ 写时复制
​ 线程安全
​ 适合于读多,写少的场景
​ 写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给array
​ 比Vector性能高
​ 最终一致性
​ 实现了List接口,使用方式与ArrayList类似

ArrayList remove 的注意点 列举:
  • ​ 数据准备:为方便演示,需要有紧挨在一起的两个或多个相同的元素
  List list=new ArrayList();
  list.add(1);
  list.add(2);
  list.add(3);
  list.add(3);
  list.add(4);

for(int i=0;i
   if(list.get(i)==3) list.remove(i);//当他删除之后 我们的另一个三就会挤上去  所以输出的是                                              [1,2,3,4]
}
可以删除 为啥?
 下标变了 

Set

特点:

无序,不重复

思考:

如果对List容器中的元素去重?上方有操作

遍历:

foreach,迭代器
扩容:

初始容量16,负载因子0.75,扩容增量1倍 实现:

​ HashSet

  • ​ 它存储唯一元素并允许空值

  • ​ 依据对象的hashcode来确定该元素是否存在

  • ​ 由HashMap支持

  • ​ 不保持插入顺序

  • ​ 非线程安全

  • ​ 性能参数:初始容量,负载因子

  • ​ 默认值: 初始容量16,负载因子0.75

    ​ 示例:new HashSet<>(20, 0.5f);

TreeSet

​ 是一个包含有序的且没有重复元素的集合
​ 作用是提供有序的Set集合,自然排序或者根据提供的Comparator进行排序
​ TreeSet是基于TreeMap实现的

Map 特点:

​ 无序,键值对,键不能重复,值可以重复,
​ 键重复则覆盖,没有继承Collection接口
​ 扩容:初始容量16,负载因子0.75,扩容增量1倍

遍历:

​ 先获取所有键的Set集合,再遍历(通过键获取值)
​ 取出保存所有Entry的Set,再遍历此Set即可

实现: HashMap

​ 线程不安全,最常用,速度快
​ 内部采用数组来存放数据
​ 基本原理

put执行过程 图:

​ Table数组中的的Node

  • 链表结构示意图:

  • 红黑树结构示意图:

​ 流程图中绿色标出的部分为JDK8新增的处理逻辑,目的是在Table[i]中的Node节点数量大于8时,通过红黑树提升查找速度。


HashTable:

​ 线程安全,不太常用

ConcurrentHashMap:

​ 线程安全,比HashTable性能高

TreeMap:

​ key值按一定的顺序排序
​ 添加或获取元素时性能较HashMap慢
​ 因为需求维护内部的红黑树,用于保证key值的顺序

LinkedHashMap:
		继承HashMap
			LinkedHashMap是有序的,且默认为插入顺序
				当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了
			 Map linkedHashMap = new LinkedHashMap<>();
             linkedHashMap.put("name1", "josan1");
             linkedHashMap.put("name2", "josan2");
             linkedHashMap.put("name3", "josan3");
             Set> set = linkedHashMap.entrySet();
             Iterator> iterator = set.iterator();
              while(iterator.hasNext()) {
            Entry entry = iterator.next();
            String key = (String) entry.getKey();
            String value = (String) entry.getValue();
            System.out.println("key:" + key + ",value:" + value);
        }
排序:

​ java.lang.Comparable
​ java.util.Comparator

工具类: Collections

​ 提供一组静态方法操作集合

Arrays

​ 提供一组静态方法操作数组

jdk8:stream 介绍 jdk8添加的一个新的功能,称之为流,可以以声明的方式来处理数据,提供一种对 Java 集合运算的方便处理方式

​ 让程序员写出高效率、干净、简洁的代码

特点

​ 可以方便的对集合进行并行操作,便于使用多核资源
​ 惰性求值
​ 不是数据结构,不保存数据
​ 不会修改原来的数据源,将操作后的数据保存到另一个对象中

操作 中间操作(Intermediate)

​ map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 skip、 parallel、 sequential、 unordered

最终操作(Terminal)

​ forEach、 forEachOrdered、 toArray、 reduce、 collect、 min、 max、 count、iterator

特点:

​ 在一次聚合操作中,可以有多个Intermediate,但是有且只有一个Terminal

⭐⭐⭐⭐⭐本期类容到此结束⭐⭐⭐⭐⭐
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/995188.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号