Java —集合类

Java —集合类

Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
链接: link.
链接: link.

1、Set(无序、唯一),包括HashSet、LinkedHashSet、TreeSet(三者都不是线程安全的)
链接: link.

HashSet:底层数据结构是哈希表(无序,唯一)。不能保证元素的排列顺序,顺序有可能发生变化。可以存储null元素,默认初始化容量16,加载因子0.75。
LinkedHashSet:底层数据结构是链表和哈希表(FIFO插入有序,唯一)。使用链表维护元素的次序,这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
TreeSet:是SortedSet接口的唯一实现类,底层数据结构是红黑树(唯一,有序)。TreeSet可以确保集合元素处于排序状态(默认自然排序即升序排序,也支持定制排序)

2、List(有序、可重复),包括ArrayList、LinkedList和Vector。

ArrayList:底层数据结构是数组,查询快,增删慢; 线程不安全,效率高。默认初始化容量是10,每次扩容时候增加原先容量的一半。
常用方法:添加元素add()、访问元素get()、修改元素set() 、删除元素remove(),以及计算 ArrayList 中的元素数量 size()
LinkedList:底层数据结构是链表,查询慢,增删快;线程不安全,效率高。
Vector:底层数据结构是数组,查询快,增删慢; 线程安全,效率低。初始化length是10,每次扩容时候增加原先容量的一倍。Stack 是Vector类的实现类。

3、Map,包括hashMap和hashTable 以及LinkedHashMap和TreeMap
链接: link.
链接: link.
链接: link.

HashMap和Hashtable都实现了Map接口;

HashMap是线程不安全的即非Synchronized的,HashMap可以接受为null的键key和值value;但为null的键只能有一个,可以有一个或多个键所对应的值为null。而HashTable的key和value均不能为null。相比来说性能高一些。HashMap是无序的。

LinkedHashMap是继承于HashMap,是基于HashMap和双向链表来实现的,但LinkedHashMap是有序的,且默认为插入顺序

Hashtable是线程安全的,即Synchronized的,性能低一些;Java 5提供了ConcurrentHashMap(也是线程安全的,部分锁),它是HashTable的替代,但性能比HashTable高很多。

TreeMap的用法(主要是排序),TreeMap中默认的排序为升序,也可以自定义排序方式

Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。

4、String、StringBuilder 和 StringBuffer的区别
链接: link.
链接: link.

String的值是不变的, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象(存放于字符串常量池)然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String

StringBuilder 和 StringBuffer是字符串变量,两者的对象能够被多次的修改,并且不产生新的未使用对象。不同的是StringBuffer是线程安全的(内部的方法使用Synchronized进行同步),性能低;而StringBuilder 是线程不安全的(单线程使用),性能高一些。
初始化时String可以赋null,但是StringBuilder 和 StringBuffer不行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值