泰顺机械网站建设,如何使用记事本做网站,关键词com,网站集约化建设的优点String 为什么不可变#xff1f; 1线程安全 2支持hash映射和缓存。因为String的hash值经常会使用到#xff0c;比如作为 Map 的键#xff0c;不可变的特性使得 hash 值也不会变#xff0c;不需要重新计算。 3出于安全考虑。网络地址URL、文件路径path、密码通常情况下都是以…String 为什么不可变 1线程安全 2支持hash映射和缓存。因为String的hash值经常会使用到比如作为 Map 的键不可变的特性使得 hash 值也不会变不需要重新计算。 3出于安全考虑。网络地址URL、文件路径path、密码通常情况下都是以String类型保存 4.字符串常量池优化
String, StringBuffer 和 StringBuilder区别 1. 可变性String 不可变StringBuffer 和 StringBuilder 可变 2. 线程安全String 不可变因此是线程安全的 StringBuilder 不是线程安全的 效率最高 StringBuffer 是线程安全的内部使用 synchronized 进行同步
Java 反射是指在运行时获取和使用类的内部信息的能力。反射可以用来获取类的名称、方法、属性、构造方法等信息也可以用来调用类的方法、设置属性的值等。 Arraylist 和 Vector 的区别 *ArrayList在内存不够时扩容为原来的1.5倍Vector是扩容为原来的2倍。 *Vector淘汰1.2属于线程安全级别的但是大多数情况下不使用Vector因为操作Vector效率比较低。 CopyOnWriteArrayList: 线程安全的 List在读多写少的场合性能非常好远远好于 Vector. HashMap和HashTable的区别 *HashMap和Hashtable都实现了Map接口。 *HashMap可以接受为null的key和valuekey为null的键值对放在下标为0的头结点的链表中而Hashtable则不行。 *HashMap是非线程安全的HashTable是线程安全的。Jdk1.5提供了ConcurrentHashMap它是HashTable的替代。 *Hashtable很多方法是同步方法在单线程环境下它比HashMap要慢。 *哈希值的使用不同HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
LinkedHashMap是*HashMap的子类 非线程安全 TreeMap是有序的key-value集合通过红黑树实现。根据键的自然顺序进行排序或根据提供的Comparator进行排序 HashMap、 HashTable、 LinkedHashMap TreeMap区别 非线程安全 | 线程安全 | 非线程安全 | 非线程安全 无序 | 按照键的插入顺序 | 按照键的插入顺序 | 按照键的升序或降序 扩容根据负载因子 | 固定的 | 根据负载因子 | 固定的 | 性能 | 高 | 低 | 高 | 低 | Con cu rrentHashMap 高效线程安全 替代HashMap、 性能低一点点
扩容 固定简单粗暴 浪费空间 负载因子合理利用空间 加强并发 动态适应 0.72 ConcurrentHashMap理解
ConcurrentHashMap是Java中的线程安全的哈希表实现它是HashMap的线程安全版本。ConcurrentHashMap具有以下特点和原理 1. 线程安全性ConcurrentHashMap使用了锁分段技术将整个哈希表分成多个段Segment每个段都有自己的锁。这样不同的线程可以同时访问不同的段提高了并发性能。相比于使用全局锁的方式ConcurrentHashMap能够支持更高的并发度。 2. 分段锁ConcurrentHashMap中的每个段都是一个独立的哈希表具有自己的锁。当一个线程对某个段进行操作时只需获取该段的锁而不会影响其他段的访问。这样可以减小锁的粒度提高并发性能。 3. 原子操作ConcurrentHashMap中的一些操作是原子的比如putIfAbsent、remove、replace等。这些操作可以保证在多线程环境下的原子性避免了竞态条件。 4. 读操作的无锁优化ConcurrentHashMap在读操作上进行了优化读操作不需要获取锁。这样可以实现读写分离提高并发性能。 5. 扩容机制ConcurrentHashMap在扩容时只需对部分段进行扩容而不是整个哈希表。这样可以减小扩容的开销和影响。 总的来说ConcurrentHashMap通过分段锁和一些优化措施实现了高效的线程安全哈希表。它适用于多线程环境下的高并发操作能够提供较好的性能和可靠性。 集合学习
list单列集合map双列集合
list系列集合:有序可重复又索引set系列集合:无序不重复无索引 数据结构
*长什么样子 *怎么添加数据 *怎么删除数据常见结构 1栈后进先出先进后出2队列先进先出后进后出 3数组查询快,增删慢 *查询速度快根据地址和索引快速点位内存是连续的 *增删慢从新排序4链表查询慢,增删快 *链表中节点是一个独立的对象在内存不连续每个节点包含数据和下一个节点的地址-单向 *无论查询哪个数据都要从 头开始 *添加和删除 - 只要断开链表重写前后地址就好 双向链表每个节点包含数据和下一个节点的地址前一个地址-可以两边查找可以提高查找效率例如查询第几个时先判断从头还是尾比较近5树节点 二叉树最多两个节点没有什么规则 二叉查找树最多两个节点左小右大一样的不存set的不重复 内容包含父左右节点地址和值没有就null 1前序遍历当前-左-右 2中序遍历左-当前-右从左到右就是从小到大 3后续遍历左-右-当前 4层序遍历一层层 弊端不平衡树太高查询慢 平衡二叉树任意节点左右高度查不超过1 旋转机制左旋右旋触发当添加节点后不是一颗平衡二叉树就旋 左旋1从添加的节点往父节点找不平衡的节点当作支点 左左和右右 旋转一次就好整体旋转 左右和右左。要旋转两次先局部旋转 在整体旋转6红黑树 是一个自平衡二叉树不是高度平衡特右的红黑规则 *根节点 必须黑色 *连个红节点不能相连 *没有值的为nil *每个节点的简单路径上黑节点相同 添加默认元素为红效率比黑的高 增删查改效率都很高
ArrayList集合底层原理
*底层是数组结构 1利用空参是时候 低层创建的数据长度默认为0 2添加第一个元素的时候底层新建一个长度为10的数组 size:(元素的个数下次存入的位置) 3存满的时候会扩容原理的1.5倍一个个添加的时候 4如果一次性添加多个元素新建长度以实际为准
LinkedList集合底层原理
*底层是双向链表查询慢。头尾操作极快 迭代器
*iterator生成一个迭代器对象默认指向0索引 *hasNext 判断是否有元素 *next获取元素移动指针在使用迭代器的时候 不要并发的添加或者删除元素 否则异常 泛型
ListString *JDK5引用的 *统一数据类型 *把运行期问题提前到编译期 java是伪泛型编译的时候 底层还是存object, 泛型类public class MycalssE{} 所有的方法都可以使用 泛型方法 public E void test(E e) 泛型接口1给出实现类型2延续泛型 泛型不支持继承性但数据支持继承性通配符 可以指定类型的范围指定某一类 Java的集合框架中的泛型参数不能是基本类型而只能是引用类型。这是由Java泛型的设计决策所决定的。 Java的泛型是在编译期进行类型检查的编译器会对泛型进行类型擦除Type Erasure将泛型类型转换为其对应的原始类型。原始类型是指不带泛型参数的类型如 List 、 Map 等。 基本类型如 int 、 char 、 boolean 等是不具备对象特性的无法作为泛型参数使用。因此为了实现泛型的类型安全性和一致性Java要求泛型参数必须是引用类型。
set系列集合 无序 ,不重复无索引 HashSet 无序 LinkedHashset有序 TreeSet可排序
哈希值*根据hashcode计算出来的int整数 *没有重写就默认用地址值计算所有一般情况会重写hashcode和equals方法 HashSet底层原理 *创建一个默认16的数组名字叫table默认扩展因子为0.75条件-扩2倍 *根据元素hash值和数组长度计算存入位置 *存入前判断是否为null如果是null就直接存入 *如果不是就调用equals方法比较属性值 1一样不存 2不一样jdk8以前:老元素挂在新元素下面jdk8后新元素直接挂在老元素后面 要和链表的每个元素equals方法比较相同不存 jdk18前数组链表 jdk18前数组链表红黑树链表和数组的长度达到阈值触发链表转红黑树 LinkedHashSet底层原理 *是HashSet的子类 *多加了在每个元素额外多了一个双向链表机制记录存储顺序 TreeSet底层原理 *可排序默认从小到大 *底层是红黑树结构实现的排序增删查改性能较好 排序 1int double默认从小到大 2字符按照ASCII码表的数字排序 3多字符依次按照每一个字母比较 不看长度 4对象 4.1默认排序自然排序比较的java对象实现comparable重写compareTo方法 4.2比较器排序 结果负数小,正数大0不存可以lambad优先级高 TreeSetString set new TreeSet(new MyComparator()); 双列集合Map hashMap *是map的实现类 *特点都是由键值决定的 无序不重复无索引 *底层根hashSet 一模一样 LikedhashMap *底层和Likedhashset一模一样,多了双向链表 *有序 TreeMap *底层和Treeset一模一样, *可排序