首页 > 其他分享 >String、StringBuffer和StringBuilder的区别,ArrayList和linkedList的区别,HashMap和HashTable的区别

String、StringBuffer和StringBuilder的区别,ArrayList和linkedList的区别,HashMap和HashTable的区别

时间:2023-09-13 11:04:18浏览次数:42  
标签:linkedList 区别 StringBuffer ArrayList value HashTable StringBuilder String

一、String、StringBuffer和StringBuilder的区别

1.1相关介绍

String是只读字符串,并不是基本数据类型,而是一个对象。从底层源码来看是一个final修饰的字符数组,所引用的字符串不能改变,一经定义无法再增删改。每次对String操作都会生成新的String对象。

所以对于经常改变内容的字符串最好不用String,因为每次生成对象都会对系统性能产生影响,特别是内存当中引用对象多了以后,JVM的GC就会开始工作,这样速度会很慢。

private final char value[];

每次“+”操作都隐式在堆上new了一个跟原字符串相同的StringBuilder对象,再调用append方法拼接+后面的字符。

StringBuffer和StringBuilder都继承了AbstractStringBuilder抽象类,冲AbstractStringBuilder抽象类中可以看到它们底层是可变的字符数组,所以再进行频繁的字符串操作的时候,建议使用StringBuffer和StringBuilder操作。

/**
* The value is used for character storage.
*/
char[] value;

另外

StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,是线程安全的

StringBuilder没有对方法加同步锁,是线程非安全的,StringBuilder效率更高。

1.2执行效率

StringBuilder > StringBuffer > String

1.3用法

操作少量的数据用String

在多线程编程中操作字符串缓冲区下操作大量数据用StringBuffer

在单线程操作字符串缓冲区下操作大量数据用StringBuilder

二、ArrayList和linkedList

Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。

Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的所有数据, (因为删除数据以后, 需要把后面所有的数据前移)

缺点: 数组初始化必须指定初始化的长度, 否则报错

例如:

int[] a = new int[4];//推荐使用这种方式初始化
int b[] = {1,3,4,7};

List是一个有序的集合,可以包含重复的元素,提供了安索引访问的方式,继承Collection。

List有两个重要的实现类,ArrayList和linkedList

ArrayList可以看作是能够自动增长容量的数组

ArrayList的toArray方法返回一个数组

ArrayList的asList方法返回一个列表

ArrayList底层的实现是Array, 数组扩容实现

LinkList是一个双链表,在添加和删除元素时比ArrayList性能更好,但在get和set方面弱于ArrayList。

三、HashMap和HashTable的区别

3.1父类不同

HashMap继承自AbstractMap,而HashTable继承自Dictionary类。

不过它们都实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口

3.2对外提供的接口不同

Hashtable比HashMap多提供了elments() 和contains() 两个方法。

elments()方法继承自HashTable的父类Dictionary。elements()方法用于返回此HashTable中的value的枚举。

contains()方法用来判断该HashTable是否包含出入的value。它的作用与containsValue()一致。事实上containsValue()就只是调用了一下contains()方法。

3.3对null的支持不同

HashTable:key和value都不能为null

HashMap:key可以为null,但是只能有一个key为null,因为必须保证key的唯一性。不过可以有多个key值对应的value为null。

3.4安全性不同

HashMap线程不安全,在多并发环境下可能会产生死锁等问题,因为需要开发人员自己处理多线程安全问题。

HashTable是线程安全的,它的每个方法上都有synchronized关键字,可直接用于多线程中。

虽然HashMap是线程不安全的,但是效率远高于HashTable,这样设计是合理的,因为大部分场景使用的是单线程。

需要多线程的时候可以使用ConcurrentHashMap,它是线程安全的,但是它的效率比HashTable要高很多,因为ConcurrentHashMap使用了分段锁,并不对整个数据进行锁定。

3.5初始容量大小和每次扩充容量大小不同

3.6计算hash值得方法不同

标签:linkedList,区别,StringBuffer,ArrayList,value,HashTable,StringBuilder,String
From: https://blog.51cto.com/u_16255459/7452623

相关文章

  • Vue.set和splice方法有什么区别?
    Vue.set方法和splice方法在Vue中用于修改数组的行为有一些区别。一:Vue.set(obj,key,value):用途:Vue.set是Vue提供的全局方法,用于向响应式对象中添加新的响应式属性,并确保这个新属性是响应式的。参数:obj:要修改的目标对象。key:要添加的属性键名。value:要添加的属性值。示......
  • git fetch、git pull区别
    参考:https://blog.csdn.net/weixin_42343307/article/details/121239170gitfetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。gitpull是将远程主机的最新内容拉下来后直接合并,即:gitpull=gitfetch+gitmerge,这样可能会产生冲突,需要......
  • linux shell 字符串变量 有双引号和无双引号的区别
     001、[root@pc1test02]#lsa.shb.sh[root@pc1test02]#cata.sh##测试程序1#!/bin/bashstr1="ab_cd_ef"tmp1=$(echo$str1|sed's/_/\n/g')echo$tmp1[root@pc1test02]#catb.sh##测试程序2#!/bin/bashstr1="ab_......
  • Fetch和ajax之间的区别
    Fetch和ajax之间的区别fetchFetchAPI是基于Promise设计的Fetch内置了对JSON数据的解析支持,我们只需要调用response.json()方法,可以直接获得返回的JSON数据。语法简洁,更加语义化原生支持率不高,可以用polyfill兼容IE8+浏览器ajax是理用XMLHttpRequest对象来请求数据的,而fetc......
  • Java中Comparable与Comparator的区别
    Java中的Comparable和Comparator都是比较有用的集合排序接口,但是这俩接口使用却有着明显区别,具体使用哪一个接口,今天我们来一起了解下。Comparable接口Comparable是一个排序接口,位于java.lang包下面,实现该接口的类就可以进行自然排序。先看下Comparable接口的定义:pa......
  • 重载和重写的区别,equals与==的区别
    一、重载和重写的区别1.1重写(Override)从字面上看重写就是重新写一遍,其实就是子类继承父类并把父类中的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)......
  • MySQL字符集详解——utf8mb4 & utf8区别?
    字符集详解|JavaGuide(Java面试+学习指南)MySQL字符编码集中有两套UTF-8编码实现:utf8和**utf8mb4**。如果使用utf8的话,存储emoji符号和一些比较复杂的汉字、繁体字就会出错。何为字符集?字符是各种文字和符号的统称,包括各个国家文字、标点符号、表情、数字等等。......
  • 面试题:Mybatis中的#{}和${}有什么区别?这是我见过最好的回答
    面试题:Mybatis中的#{}和${}有什么区别?前言今天来分享一道比较好的面试题,“Mybatis中的#{}和${}有什么区别?”。对于这个问题,我们一起看看考察点和比较好的回答吧!题,看看普通人考察点mybatis是现在企业级开发中经常使用的数据持久层框架,这个问题就是面试官想考察我们对#{},${}......
  • 一图看懂iPhone 15系列:15/Plus/Pro/Pro Max有啥区别?详细配置对比
    距离iPhone15系列发布只剩下2天(北京时间9月13日凌晨1点),即将推出预计分别是iPhone15、iPhone15Plus,以及Pro系列的iPhone15Pro以及iPhone15ProMax。TrendForce集邦汇总了四款新机规格预测。硬件方面,受欧盟订定法案的限制,苹果也将于今年加入Type-C的行列,全新更换C口。iPho......
  • 敏捷项目管理与传统项目管理的区别?一目了然
    从事项目管理行业的人应该都知道,项目管理领域有两种管理方式:传统项目管理和敏捷项目管理。很多人在团队引入敏捷的时候,会有一个疑惑,传统项目管理和敏捷项目管理的区别分别是什么? 什么是瀑布式项目管理?瀑布式项目管理是一种传统的项目管理方式。在瀑布式项目管理中,项目的整体管理过......