当前位置: 首页 > wzjs >正文

完备的网站建设推广中国建设银行天津分行网站

完备的网站建设推广,中国建设银行天津分行网站,wordpress云盘视频,跨境电商网站如何做推广javaSE中3个重点: 面向对象相关知识集合类 (数据结构,线程)多线程次重点: 网络 (计网)IO常用类异常Java集合类概述Java集合类位于java.util包中,主要用于存储和操作一组对象。根据数据结构和用途的不同,可分为三大类:List(有序可重…

javaSE中3个重点: 面向对象相关知识

集合类 (数据结构,线程)

多线程

次重点: 网络 (计网)

IO

常用类

异常

Java集合类概述

Java集合类位于java.util包中,主要用于存储和操作一组对象。根据数据结构和用途的不同,可分为三大类:List(有序可重复)、Set(无序唯一)和Map(键值对存储)。


核心接口与实现类

List接口
  • ArrayList:基于动态数组实现,随机访问效率高,但插入/删除元素时性能较低。
    List<String> list = new ArrayList<>();
    list.add("Java");
    list.get(0); // 访问元素
    
    
  • LinkedList:基于双向链表实现,插入/删除效率高,但随机访问性能较差。
  • Vector:线程安全的动态数组,性能较低,是线程安全的 。
Set接口
  • HashSet:基于哈希表实现,元素无序,允许null值。
    Set<Integer> set = new HashSet<>();
    set.add(1);
    set.contains(1); // 检查元素  
    
    
  • LinkedHashSet:维护插入顺序的HashSet
  • TreeSet:基于红黑树实现,元素自然排序或自定义排序。
Map接口
  • HashMap:基于哈希表的键值对存储,非线程安全,允许null键/值。
    基本特点: 双列集合,键不能重复,值可以重复,可以有一个key为null 
    
    Map<String, Integer> map = new HashMap<>();
    map.put("Key", 100);
    map.get("Key"); // 获取值  
    数据结构: 

源码

put方法源码分析

public V put(K key, V value) {//通过key计算哈希值return putVal(hash(key), key, value, false, true);
}
static final int hash(Object key) {int h;                       为了减少哈希值冲突return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}

 final V putVal(int hash, K key, V value, boolean onlyIfAbsent,boolean evict) {Node<K,V>[] tab; //哈希表Node<K,V> p; //记录之前int n, i; //n是哈希表长度, i是索引if ((tab = table) == null || (n = tab.length) == 0)n = (tab = resize()).length;//创建哈希表if ((p = tab[i = (n - 1) & hash]) == null) // == 97%16 根据哈希值计算位置//如果该位置为null,则直接将key,value包装到一个node对象中,直接存放到第i个位的第一个tab[i] = newNode(hash, key, value, null);else {Node<K,V> e; K k;//判断key是否重复, 先判断哈希值(快),但是哈希有问题,值相同,但内容不同,//所以在哈希值相同时,需要调用equals(),判断内容是否相同.if (p.hash == hash &&((k = p.key) == key || (key != null && key.equals(k))))e = p;//当key不重复时,判断类型是树类型还是链表类型else if (p instanceof TreeNode)//已经是树类型,向红黑树上添加元素e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);else {//链表for (int binCount = 0; ; ++binCount) {if ((e = p.next) == null) {p.next = newNode(hash, key, value, null);//添加完成后,判断链表长度if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1sttreeifyBin(tab, hash);//转红黑树break;}if (e.hash == hash &&((k = e.key) == key || (key != null && key.equals(k))))break;p = e;}}if (e != null) { // existing mapping for keyV oldValue = e.value;if (!onlyIfAbsent || oldValue == null)e.value = value;//key相同时,会用后面key的值,覆盖之前的相同的key的值afterNodeAccess(e);return oldValue;}}++modCount;if (++size > threshold)resize();afterNodeInsertion(evict);return null;}

重点参数:

哈希表长度: 默认是16

哈希表每次扩容原来 2 倍

哈希表的负载因子 0.75, 哈希表不会装满的,装满会影响查询效率,所以会牺牲一定的空间而换取查询效率

链表长度上限是 8 ,尝试将链表转为红黑树,但是不一定转成功, 还会判断哈希表长度,哈希表长度小于64

会先扩容哈希表,扩容后所有元素位置需要重新计算,这样链表会变短,

只有当链表长度大于等于8且哈希表长度大于64,链表才会转成红黑树.

当红黑树节点数量减少为6个时,红黑树退化成链表

  • LinkedHashMap:维护插入顺序的HashMap
  • TreeMap:基于红黑树实现,键按自然顺序或比较器排序。
  • Hashtable:线程安全的Map实现,已被ConcurrentHashMap取代。

线程安全集合

  • ConcurrentHashMap:分段锁实现的高并发Map

ConcurrentHashMap是一个线程安全的map,加锁的方式与Hashtable不同

Hashtable直接在方法上加锁,一次只能有一个线程进入方法操作.

ConcurrentHashMap不是给方法加的锁,个每个哈希表中的位置加锁

ConcurrentHashMap 不支持存储 null 键和 null 值.
为了消除歧义
ConcurrentHashMap 不能 put null 是因为 无法分辨是 key 没找到的 null 还
是有 key 值为 null,这在多线程里面是模糊不清的,所以就不让 put null。
ConcurrentHashmap 和 Hashtable 都是支持并发的,这样会有一个问题,当
你通过 get(k)获取对应的 value 时,如果获取到的是 null 时,你无法判断,它
是 put(k,v)的时候 value 为 null,还是这个 key 从来没有做过映射。

  • Collections.synchronizedXXX:通过工具类包装非线程安全集合(如Collections.synchronizedList())。
  • CopyOnWriteArrayList
    ArraayList 是线程不安全的,在高并发情况下可能会出现问题, Vector 是线
    程安全的。
    但是在很多应用场景中,读操作可能会远远大于写操作。由于读操作根本不
    会修改原有的数据,因此如果每次读取都进行加锁操作,其实是一种资源浪费。
    我们应该允许多个线程同时访问 List 的内部数据,毕竟读操作是线程安全的。
    JDK 中提供了 CopyOnWriteArrayList 类,将读取的性能发挥到极致,取是完
    全不用加锁的,并且更厉害的是:写入也不会阻塞读取操作,只有写入和写入之
    间需要进行同步等待,读操作的性能得到大幅度提升。
    CopyOnWriteArrayList 类的所有可变操作(add,set 等等)都是通过创建底
    层数组的新副本来实现的。当 List 需要被修改的时候,并不直接修改原有数组
    对象,而是对原有数据进行一次拷贝,将修改的内容写入副本中。写完之后,再
    将修改完的副本替换成原来的数据,这样就可以保证写操作不会影响读操作了。
    CopyOnWriteArraySet
    CopyOnWriteArraySet 的实现基于 CopyOnWriteArrayList,不能存储重复数
    据。
    辅助类
  • CountDownLatch
    CountDownLatch 允许一个线程等待其他线程各自执行完毕后再执行。底层实
    现实现是通 AQS 来完成的.创建 CountDownLatch 对象时指定一个初始值是线
    程的数量。每当一个线程执行完毕后,AQS 内部的 state 就-1,当 state 的值为
    0 时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。

常用工具类

  • Collections:提供排序、查找、同步等方法。
    Collections.sort(list); // 排序List  
    
    
  • Arrays:数组操作工具,如Arrays.asList()转换数组为List。

选择集合类的原则

  1. 是否需要有序:选择ListLinkedHashSet/LinkedHashMap
  2. 是否需要唯一性:选择SetMap的键。
  3. 是否需要键值对:直接使用Map
  4. 是否考虑线程安全:选择ConcurrentHashMapCopyOnWriteArrayList

性能对比

  • ArrayList vs LinkedList:频繁查询用ArrayList,频繁增删用LinkedList
  • HashSet vs TreeSet:需要快速访问用HashSet,需要排序用TreeSet
  • HashMap vs TreeMap:类似HashSetTreeSet的区别。

通过理解集合类的特性和适用场景,可以更高效地选择合适的数据结构。


文章转载自:

http://27zCPTTU.rxgnn.cn
http://BchKuT6Q.rxgnn.cn
http://LkPb4GiO.rxgnn.cn
http://ZV8qLODj.rxgnn.cn
http://x40CdXX5.rxgnn.cn
http://EYO4i5N6.rxgnn.cn
http://LnWQdChB.rxgnn.cn
http://dWBfaK52.rxgnn.cn
http://9fRiayLB.rxgnn.cn
http://SL2rbyjB.rxgnn.cn
http://KU2NRyyo.rxgnn.cn
http://pffvJKAK.rxgnn.cn
http://IAUyc9rd.rxgnn.cn
http://vP4COSwA.rxgnn.cn
http://gfFMF42p.rxgnn.cn
http://djK9qa3z.rxgnn.cn
http://y75pPkL0.rxgnn.cn
http://sqhYra2F.rxgnn.cn
http://g2GpnTV2.rxgnn.cn
http://6uCBIGyX.rxgnn.cn
http://RGrBvrGY.rxgnn.cn
http://UnyoE69Z.rxgnn.cn
http://4VKF84jP.rxgnn.cn
http://6Go8lvLV.rxgnn.cn
http://YDcdPx8Z.rxgnn.cn
http://K51KrRWI.rxgnn.cn
http://frEC8FZI.rxgnn.cn
http://8S3Lb6RG.rxgnn.cn
http://bn4icQoE.rxgnn.cn
http://uZspn64i.rxgnn.cn
http://www.dtcms.com/wzjs/711965.html

相关文章:

  • 网站时间轴电商网站建设课件
  • 手机网站微信支付接口开发教程photoshop做网站
  • 上传网站软件网站板块设计有哪些
  • 网站建设与管理的总结报告网站建设中的图片及视频要求
  • 深圳建设工程造价管理站c2c网站的特点
  • 商旅网站建设档案网站建设
  • 滑县网站建设策划网站建设哪些好
  • php做网站麻烦吗python 网站开发
  • 信仰类型的企业网站wordpress搭建网站有什么好外
  • 温州住房与城乡建设部网站有了域名之后如何做网站
  • 浦口区建设局网站东莞市建设企业网站服务机构
  • 微餐饮网站建设比较好沙坪坝区优化关键词软件
  • 建筑网站制作杭州的网站设计
  • 公司网站建设大概多少钱外贸建站模板价格
  • 一般网站用什么软件做wordpress 双语
  • 小伙做网色网站给客户做网站 赚钱吗
  • 做网站兼职您的网站空间即将过期
  • 电子商务网站开发难点网站建设最快多长时间
  • 我的网站百度搜不到陕西建设网综合综合服务中心
  • 建设信用卡银行积分商城网站wordpress 图片选择器
  • 查询网站mx记录受欢迎自适应网站建设地址
  • 福州网站制作公司网页微信手机版
  • 外贸网站wordpress加ssl网站建设招标方式
  • 阿里巴巴国际贸易网站推广工具精品网文
  • 建视频网站需要多大空间军事最新新闻播报
  • 设计公司网站建设费用博客主题Wordpress
  • 做淘客网站哪个cms好网站制作专家
  • 论坛网站模块网站设计抄袭
  • 仿站定制模板建站网站建设公开课
  • 怎么在网站上做签到百度站长seo