java集合、String问题

1、ArrayList 、 LinkList 、vector 的区别 ???

1、首先他它们都实现了List接口。

   

2、因为实现方式不同,对不同操作有效率之分。

ArrayList 底层是数组结构 ,对数据查询效率很高,对修改操作效率较低。

②LinkedList 是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。并且LinkList实现了Queue接口,,该接口比List提供了更多的方法,包括 offer(),peek(),poll()等。LinkLedist没有初始化大小也没有扩容机制,新数据加入只需要修改 next 和 prec 节点的指向 。

   

③Vector本质和ArrayList很相似,只是Vector是线程安全的 。

Vector的所有操作方法都被同步Synchronized了,既然被同步了,多个线程就不可能同时访问vector中的数据,只能一个一个地访问,所以不会出现数据混乱的情况,所以是线程安全的。

   

④ArrayList 和 Vector 初始容量为10。arrayList 每次扩容是之前容量的1.5倍,而Vector扩容是之前的2倍。

   

2、String 、 StringBuilder 、StringBuffer 的区别 ???

   

1、StringBuilder 和 StringBuffer 与 String 相比,都实现了 "implementsjava.io.Serializable , CharSequence",但比String又多继承了 AbstractStringBuilder类。

   

2、StringBuilder和StringBuffer的内部实现其实跟String是一样的,都是通过一个char类型的数组进行存储字符串的,不同的是String类中的char数组是final修饰的,是不可变的,而StringBuilder和StringBuffer中的char数组没有被final修饰

   

①String 类如果被频繁修改,每次都会生成一个新的对象,这样会浪费大量的内存空间 。

②StringBuiler 和 StringBuffer 如果被经常修改不会生成新的对象,就不会浪费大量的内存空间,甚至导致JVM的GC开始工作。

③但StringBuilder是线程不安全的,StringBuffer是线程安全的,因为StringBuffer中的方法都使用了Synchronized修饰。

   

Ps: 单看效率 : StringBuilder > String > StringBuffer

   

3、HashMap 、LinkHashMap、TreeMap 、HashTable的区别 ? ? ?

   

①HashMap和TreeMap的父类AbstractMap , 而HashTable的父类是Dictionary 。

   

HashMap : key->无序唯一 (底层是hashSet),value->无序不唯一

HashMap由数组+链表组成,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。

   

LinkedHashMap: 和hashMap基本一致,只是链表来维持顺序。保持添加和遍历顺序一致。

   

TreeMap: key->有序(自然顺序),唯一 value:不唯一

key的要求有内部比较器或外部比较器,根据比较器的判断,key相同将会被覆盖。

   

HashTable: 线程安全的,里面操作数据的方法也都用Synchronized修饰过。

   

ConcurrentHashMap

   

   

   

   

   

   

   

   

 

   

posted @ 2020-10-30 00:07  黑质白章  阅读(80)  评论(0编辑  收藏  举报