大家好,今天来为大家解答vector和arraylist区别这个问题的一些问题点,包括vector线程安全也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
arraylist和hsahset的区别,hashmap和hashtable的区别
在Java2以前,一般使用Hashtable来映射键值和元素。为了使用Java集合框架,Java对Hashtable进行了重新设计,但是,为了向后兼容保留了所有的方法。Hashtable实现了Map接口,除了Hashtable具有同步功能之外,它与HashMap的用法是一样的。·在使用时一般是用ArrayList代替Vector,LinkedList代替Stack,HashMap代替HashTable,即使在多线程中需要同步,也是用同步包装类。另外在使用上还有一些小的差异,比如:
HashTable的key和value都不允许为null值,而HashMap的key和value则都是允许null值的。这个其实没有好坏之分,只是Sun为了统一Collection的操作特性而改进的。
HashTable有一个contains(Objectvalue)方法,功能上与containsValue(Objectvalue)一样,但是在实现上花销更大,现在已不推荐使用。而HashMap只有containsValue(Objectvalue)方法。
HashTable使用Enumeration,HashMap使用Iterator。Iterator其实与Enmeration功能上很相似,只是多了删除的功能。用Iterator不过是在名字上变得更为贴切一些。模式的另外一个很重要的功用,就是能够形成一种交流的语言(或者说文化)。有时候,你说Enumeration大家都不明白,说Iterator就都明白了。
在实现上两者已有一些差异,这里简单说明一下:HashTable中构造hash数组时initialCapacity默认大小是11,增加的方式是old*2+1。HashMap中构造hash数组时initialCapacity默认大小是16,而且一定是2的指数。对于哈希值的使用也有所不同,HashTable直接使用对象的hashCode,代码是这样的:而HashMap重新计算hash值,而且用与代替求模:vector和队列有什么区别
ArrayList和Vector的区别这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的接着才说ArrayList与Vector的区别,这主要包括两个方面:
.
(1)同步性:Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。
如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。
(2)数据增长:ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。
Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)。ArrayList与Vector都可以设置初始的空间大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。总结:即Vector增长原来的一倍,ArrayList增加原来的0.5倍。
简单列个表格
vector和arraylist哪个好
有时用Vector更好一点,有时用ArrayList更好一点,不能准确容易的给出答案,因为要视具体情况而定,有四个主要考虑的因素:
1:API
2:同步(synchronization)
3:数据增长(Datagrowth)
4:使用模式(Usagepattern)
在KenArnold,JamesGosling,andDavidHolmes的Java程序语言的描述中,Vector和ArrayList是类比设计的,从API的角度来看,两个类有很多相似性,但是两个类也有一些不同。
Java程序员跳槽如何快速全面复习面试题
建议自己整理答案,这样有印象,也能节省时间。
2021年很多公司都在问黑红树,数据结构与算法一定要看哦~
Java基础?向对象和?向过程的区别Java语?有哪些特点?关于JVMJDK和JRE最详细通俗的解答OracleJDK和OpenJDK的对?Java和C++的区别?什么是Java程序的主类应?程序和?程序的主类有何不同?Java应?程序与?程序之间有哪些差别?字符型常量和字符串常量的区别?构造器Constructor是否可被override?重载和重写的区别Java?向对象编程三?特性:封装继承多态StringStringBuffer和StringBuilder的区别是什么?String为什么是不可变的??动装箱与拆箱在?个静态?法内调??个?静态成员为什么是?法的?在Java中定义?个不做事且没有参数的构造?法的作?importjava和javax有什么区别?接?和抽象类的区别是什么?成员变量与局部变量的区别有哪些?创建?个对象?什么运算符?对象实体与对象引?有何不同?什么是?法的返回值?返回值在类的?法?的作?是什么??个类的构造?法的作?是什么?若?个类没有声明构造?法,该程序能正确执?吗?为什么?构造?法有哪些特性?静态?法和实例?法有何不同对象的相等与指向他们的引?相等,两者有什么不同?在调??类构造?法之前会先调??类没有参数的构造?法,其?的是?==与equals(重要)hashCode与equals(重要)为什么Java中只有值传递?简述线程、程序、进程的基本概念。以及他们之间关系是什么?线程有哪些基本状态?关于fifinal关键字的?些总结Java中的异常处理Java序列化中如果有些字段不想进?序列化,怎么办?获取?键盘输?常?的两种?法Java中IO流常?关键字总结:static,fifinal,this,super深拷?vs浅拷?Java集合说说List,Set,Map三者的区别?Arraylist与LinkedList区别?ArrayList与Vector区别呢?为什么要?Arraylist取代Vector呢?说?说ArrayList的扩容机制吧2.2.5HashMap和Hashtable的区别HashMap和HashSet区别HashSet如何检查重复HashMap的底层实现HashMap的?度为什么是2的幂次?HashMap多线程操作导致死循环问题ConcurrentHashMap和Hashtable的区别ConcurrentHashMap线程安全的具体实现?式/底层具体实现comparable和Comparator的区别集合框架底层数据结构总结如何选?集合?多线程什么是线程和进程?请简要描述线程与进程的关系,区别及优缺点?说说并发与并?的区别?为什么要使?多线程呢?使?多线程可能带来什么问题?说说线程的?命周期和状态?什么是上下?切换?什么是线程死锁?如何避免死锁?说说sleep()?法和wait()?法区别和共同点?为什么我们调?start()?法时会执?run()?法,为什么我们不能直接调?run()?法?说?说??对于synchronized关键字的了解说说??是怎么使?synchronized关键字,在项?中?到了吗synchronized关键字最主要的三种使??式讲?下synchronized关键字的底层原理说说JDK1.6之后的synchronized关键字底层做了哪些优化,可以详细介绍?下这些优化吗谈谈synchronized和ReentrantLock的区别讲?下Java内存模型说说synchronized关键字和volatile关键字的区别ThreadLocal原理及ThreadLocal内存泄露问题实现Runnable接?和Callable接?的区别执?execute()?法和submit()?法的区别是什么呢?线程池原理分析能不能给我简单介绍?下AtomicInteger类的原理AQS原理分析JVM介绍下Java内存区域(运?时数据区)说?下Java对象的创建过程对象的访问定位有哪两种?式?说?下堆内存中对象的分配的基本策略MinorGc和FullGC有什么不同呢?如何判断对象是否死亡?(两种?法)简单的介绍?下强引?,软引?,弱引?,虚引?如何判断?个常量是废弃常量?如何判断?个类是??的类?垃圾收集有哪些算法,各?的特点?HotSpot为什么要分为新?代和?年代?常见的垃圾回收器有哪些?类加载过程网络OSI与TCP/IP各层的结构与功能,都有哪些协议?TCP三次握?和四次挥?(?试常客)TCP,UDP协议的区别TCP协议如何保证可靠传输ARQ协议滑动窗?和流量控制拥塞控制在浏览器中输?url地址ijk显示主?的过程(?试常客)状态码各种协议与HTTP协议之间的关系HTTP?连接,短连接HTTP是不保存状态的协议,如何保存?户状态?Cookie的作?是什么?和Session有什么区别?HTTP1.0和HTTP1.1的主要区别是什么?URI和URL的区别是什么?HTTP和HTTPS的区别?数据结构Java集合框架中的队列QueueHashSet和TreeSet底层数据结构List的常?实现类ArrayList和LinkedList源码学习Map?叉树完全?叉树满?叉树堆?叉查找树(BST)平衡?叉树(Self-balancingbinarysearchtree)红?树B-,B+,B*树LSM树算法?道常?的字符串算法题总结最?公共前缀回?串两数相加翻转链表链表中倒数第k个节点删除链表的倒数第N个节点合并两个排序的链表剑指offer部分编程题跳台阶问题变态跳台阶问题?维数组查找替换空格题?描述:数值的整数次?调整数组顺序使奇数位于偶数前?链表中倒数第k个节点反转链表合并两个排序的链表?两个栈实现队列栈的压?,弹出序列数据库MySQL存储引擎字符集及校对规则索引查询缓存的使?什么是事务?事物的四?特性(ACID)并发事务带来哪些问题?事务隔离级别有哪些?MySQL的默认隔离级别是?锁机制与InnoDB锁算法?表优化解释?下什么是池化设计思想。什么是数据库连接池?为什么需要数据库连接池?分库分表之后,id主键如何处理??条SQL语句在MySQL中如何执?的MySQL?性能优化规范建议?条SQL语句执?得很慢的原因有哪些?Redis为什么要?redis/为什么要?缓存为什么要?redis?不?map/guava做缓存?redis的线程模型redis和memcached的区别redis常?数据结构以及使?场景分析redis设置过期时间redis内存淘汰机制(MySQL?有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?)redis持久化机制(怎么保证redis挂掉之后再重启数据可以进?恢复)redis事务缓存雪崩和缓存穿透问题解决?案如何解决Redis的并发竞争Key问题如何保证缓存与数据库双写时的数据?致性?Spring什么是Spring框架?列举?些重要的Spring模块?@RestControllervs@Controller讲一下SpringIoC和AOPSpring中的bean的作?域有哪些?Spring中的单例bean的线程安全问题了解吗?@Component和@Bean的区别是什么?将?个类声明为Spring的bean的注解有哪些?Spring中的bean?命周期?SpringMVC?作原理了解吗?Spring框架中?到了哪些设计模式?Spring事务中的隔离级别有哪?种?Spring事务中哪?种事务传播?为?@Transactional(rollbackFor=Exception.class)注解了解吗?如何使?JPA在数据库中?持久化?个字段?MyBatis#{}和${}的区别是什么?Xml映射?件中,除了常?的select|insert|updae|delete标签之外,还有哪些标签?最佳实践中,通常?个Xml映射?件,都会写?个Dao接?与之对应,请问,这个Dao接?的?作原理是什么?Dao接??的?法,参数不同时,?法能重载吗?Mybatis是如何进?分?的?分?插件的原理是什么?简述Mybatis的插件运?原理,以及如何编写?个插件。Mybatis执?批量插?,能返回数据库主键列表吗?Mybatis动态sql是做什么的?都有哪些动态sql?能简述?下动态sql的执?原理不?Mybatis是如何将sql执?结果封装为?标对象并返回的?都有哪些映射形式?Mybatis能执??对?、?对多的关联查询吗?都有哪些实现?式,以及它们之间的区别。Mybatis是否?持延迟加载?如果?持,它的实现原理是什么?Mybatis的Xml映射?件中,不同的Xml映射?件,id是否可以重复?Mybatis中如何执?批处理?Mybatis都有哪些Executor执?器?它们之间的区别是什么?Mybatis中如何指定使?哪?种Executor执?器?Mybatis是否可以映射Enum枚举类?Mybatis映射?件中,如果A标签通过include引?了B标签的内容,请问,B标签能否定义在A标签的后?,还是说必须定义在A标签的前??简述Mybatis的Xml映射?件和Mybatis内部数据结构之间的映射关系?为什么说Mybatis是半?动ORM映射?具?它与全?动的区别在哪??KafkaKafka是什么?主要应?场景有哪些?和其他消息队列相?,Kafka的优势在哪??队列模型了解吗?Kafka的消息模型知道吗?什么是Producer、Consumer、Broker、Topic、Partition?Kafka的多副本机制了解吗?带来了什么好处?Zookeeper在Kafka中的作?知道吗?Kafka如何保证消息的消费顺序?Kafka如何保证消息不丢失Kafka如何保证消息不重复消费NettyNetty是什么?为什么要?Netty?Netty应?场景了解么?Netty核?组件有哪些?分别有什么作??EventloopGroup了解么?和EventLoop啥关系?Bootstrap和ServerBootstrap了解么?NioEventLoopGroup默认的构造函数会起多少线程?Netty线程模型了解么?Netty服务端和客户端的启动过程了解么?什么是TCP粘包/拆包?有什么解决办法呢?Netty?连接、?跳机制了解么?Netty的零拷?了解么?尚硅谷Java大厂面试题第3季,跳槽必刷题目+必扫技术盲点(周阳主讲)_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Hy4y1B78T?
尚硅谷Java大厂面试题第2季,面试必刷,跳槽大厂神器_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV18b411M7xz?
尚硅谷经典Java面试题第一季(java面试精讲)_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Eb411P7bP?
强烈推荐一个网站:
Java面试题-帮助你通过Java面试(zwmst.com)
https://zwmst.com/
为什么是List list = new ArrayList,而不直接用ArrayList
List是一个接口,而ArrayList是一个类。
ArrayList继承并实现了List。Listlist=newArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayListlist=newArrayList();创建一对象则保留了ArrayList的所有属性。为什么一般都使用Listlist=newArrayList(),而不用ArrayListalist=newArrayList()呢?问题就在于List有多个实现类,如LinkedList或者Vector等等,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类呢?,这时你只要改变这一行就行了:Listlist=newLinkedList();其它使用了list地方的代码根本不需要改动。假设你开始用ArrayListalist=newArrayList(),这下你有的改了,特别是如果你使用了ArrayList特有的方法和属性。,如果没有特别需求的话,最好使用Listlist=newLinkedList();,便于程序代码的重构.这就是面向接口编程的好处文章到此结束,如果本次分享的vector和arraylist区别和vector线程安全的问题解决了您的问题,那么我们由衷的感到高兴!