java容器初识

1.基本概念

Java容器可以被分为两类:

  • Collection:一个独立元素的序列,这些元素都服从一条或者多条规则。 List必须按照插入的顺序保存元素,而set不能有重复的元素。Queue按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)。
  • Map:一组成对的“键值对”对象,允许你使用键来查找值。

注:
1、java.util.Collection是一个集合接口。
它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。

2、java.util.Collections是一个包装类。
它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

2.容器集

Collection
----List
-------LinkedList
-------ArrayList
-------Vecoter
-------Stack
----Set
------HashSet
------LinkedSet
------TreeSet
Map
----HashTable
----HashMap
----WeakHashMap

3.同步容器

同步容器保证同一个实例同时只有一个线程能访问

  • Vector
  • Stack
  • HashTable
  • Collections.synchronized方法生成

4.并发容器

通过copy一个新的容器来进行修改,这样读操作就不需要加锁,可以并发读,因为在读的过程中是采用的旧的容器,即使新容器做了修改对旧容器也没有影响,同时也很好的解决了迭代过程中其他线程修改导致的并发问题。

  • ConcurrentHashMap:线程安全的HashMap的实现
  • CopyOnWriteArrayList:线程安全且在读操作时无锁的ArrayList
  • CopyOnWriteArraySet:基于CopyOnWriteArrayList,不添加重复元素
  • ArrayBlockingQueue:基于数组、先进先出、线程安全,可实现指定时间的阻塞读写,并且容量可以限制
  • LinkedBlockingQueue:基于链表实现,读写各用一把锁,在高并发读写操作都多的情况下,性能优于ArrayBlockingQueue

6.Collection接口

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。JavaSDK不提供直接继承自Collection的类,JavaSDK提供的类都是继承自Collection的“子接口”如List和Set。

主要方法

boolean add(Object o)添加对象到集合
boolean remove(Object o)删除指定的对象
int size()返回当前集合中元素的数量
boolean contains(Object o)查找集合中是否有指定的对象
boolean isEmpty()判断集合是否为空
Iterator iterator()返回一个迭代器
boolean containsAll(Collection c)查找集合中是否有集合c中的元素
boolean addAll(Collection c)将集合c中所有的元素添加给该集合
void clear()删除集合中所有元素
void removeAll(Collection c)从集合中删除c集合中也有的元素
void retainAll(Collection c)从集合中删除集合c中不包含的元素

6.1 List接口

List是有序的Collection,使用此接口能够精确地控制数据的增删改查。

6.1.1 ListArray

ListArray类实现了链表的操作,是一种非同步的容器,如果需要多线程访问时,需要自己实现同步,通过Collections.synchronizedList(new ListArray<>)方法创建list时构造同步的list,插入删除效率高

6.1.2 ArrayList

ArrayList类实现了可变大小的数组,底层通过重新创建一个更大的内存的ArrayList实现扩容,也属于非同步容器,查找效率高
一般使用这两个即可,因为非同步意味着效率高

6.1.3 Vector

Vector类类似于ArrayList类,但是它实现了同步,从一定程度上保证了线程的安全,但它只保证了多个线程在使用同一种方法时安全,但如果多线程使用不同方法调用Vector时不安全

6.1.4 Stack

Stack类继承Vector,实现了一个堆栈。基本方法有push和pop方法,peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

6.2 Set接口

Set是一种不包含重复的元素的Collection,因此他最多包含一个null值

6.2.1 HashSet
  • 它不允许出现重复元素;
  • 不保证集合中元素的顺序
  • 允许包含值为null的元素,但最多只能有一个null元素。
6.2.2 TreeSet

TreeSet描述的是Set的一种变体——可以实现排序等功能的集合,它在讲对象元素添加到集合中时会自动按照某种比较规则将其插入到有序的对象序列中,并保证该集合元素组成的读优先序列时刻按照“升序”排列。

7.Map集合接口

Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

主要方法
  • boolean equals(Object o)比较对象
  • boolean remove(Object o)删除一个对象
  • put(Object key,Object value)添加key和value

7.1 HashTable

HashTable类实现一个key-value映射的哈希表,key和value都不允许出现null值,它是线程安全的。 HashTable的所有方法都是同步的。直接使用对象的hashCode,HashTable中hash数组默认大小是11,增加的方式是 old*2+1

7.2 HashMap

null可以作为键,这样的键只有一个,但可以有一个或多个键所对应的值为null。而HashMap中的方法在缺省情况下是非同步的,而HashMap重新计算hash值。HashMap中hash数组的默认大小是16,而且一定是2的指数。

7.3 WeakHashMap

WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值