Java集合

Java集合类主要由两个接口派生出:Collection和Map

Collection中,Set为无序集合且元素不可重复、List为有序集合且元素可重复、Queue为队列


Map中的Key不可重复,通过Key获取Value                                                                                                                                                                                                   

三类集合的示意图如下:List元素可通过索引访问,Map中元素值可通过Key访问,而Set中元素只能通过Set本身访问

Set集合中的元素不允许重复,靠equals()方法来判断两元素是否相同。Set提供了Iterator方法执行迭代任务。HashSet判断两元素相同的标准是:两个元素通过equals方法比较相等,而且两个对象的HashCode方法返回值(元素在HashSet中的存储位置)也相等。LinkedHashSet也是根据HashCode值决定元素的存储位置,但它同时使用链表维护元素的次序,用链表来维护内部顺序。

TreeSet是SortedSet的唯一实现,正如SortedSet名字所述,TreeSet确保集合元素处于排序状态;TreeSet并不以元素插入顺序排序,而是以元素实际值排序。EnumSet是一个专为枚举类设计的集合类,EnumSet中的集合元素也是有序的,EnumSet以枚举值在Enum类中的定义顺序来决定集合元素的顺序。

Set的几个子类都不是线程安全的,如想保持同步,可用Collections类的SychronizedSortedSet方法来包装该集合:SortedSet  s=Collections.synchronizedSortedSet(new TreeSet()).

List接口。List集合代表一个有序集合,并允许使用重复的元素。List接口提供了Iterator和ListIterator执行迭代任务,ListIterator可执行向前迭代。

ArrayList和Vector的元素个数默认为10,而元素个数可根据需要自动增加。ArrayList与Vector的区别是:ArrayList是线程不安全的,多线程访问时,要手动保证集合的同步性。Vector是线程安全的,所以其性能比ArrayList要低(其是早期JDK中的实现,后被ArrayList代替)。Vector性能低,所以一般不推荐使用,但Vector有一个Stack子类,模拟栈的实现,提供Pop()push()等方法。

Queue接口。Queue用于模拟了队列这种数据结构,提供add()、poll()等方法。Deque是Queue的子接口,实现双向队列,提供addFirst、addLast、pop、push等方法。而LinkedList实现了List及Deque接口,其可用来当做栈、双向队列、List来使用。PriorityQueue队列中元素顺序不是按加入队列的顺序,而是按元素大小排列。

Map用于保存具有映射关系的数据。

跟Set很类似,Map也提供了几乎一样的子类:HashMap、LinkedHashMap、SortedMap、TreeMap、EnumMap等实现类和子接口。而方法有Put(key,value)(增加元素),get(key),remove(key)等。

Map中包括了一个子类:Entry。该类封装了一个Key-value对,Entry包含三个方法:getKey(),getValue(),SetValue()

我们可以把Map理解成一个特殊的Set,该Set包含的集合元素是Entry对象。

HashMap和Hashtable实现类

HashMap和Hashtable都是接口Map的典型实现类,他们之间的关系完全类似于ArrayList与Vector的关系:HashTable是一个古老的Map实现类。

HashMap不是线程安全的,而Hashtable是线程安全的,所以Hashtable的性能较低,但多线程访问Map时,使用Hashtable实现类更好。

HashMap可以使用Null作为Key或Value,而Hashtable不允许Null作为Key或Value,这会引发NullPointerException异常。

尽量少用Hashtable。

SortedMap接口和TreeMap实现类

同Set一样,Map接口派生出SortedMap子接口,而SortedMap有一个TreeMap实现类。

WeakHashMap实现类:实现机制与HashMap基本相似,但其Key只保留对对象的弱引用。

IdentityHashMap实现类:实现机制与HashMap基本相似,但在处理两个Key相等时比较独特:当且仅当Key1==Key2时, 才认为相等。

EnumMap:是一个与枚举类一起使用的Map实现。

操作集合的工具类:Collections

Java提供了一个操作Set、List和Map等集合的工具类:Collections。该工具类提供了对元素的排序、查询、修改及对集合对象实现同步等方法。

正如前面提到的,Java常用集合推荐的三个实现类:HashSet、ArrayList、HashMap都是线程不安全的。Collections提供了synchronizedList、synchronizedSet、synchronizedMap等方法来实现同步,如:List l=Collections.synchronizedList(new ArrayList);







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值