Java中的集合

来源:互联网 发布:投影仪怎么连接网络 编辑:程序博客网 时间:2024/05/21 06:01

java中的集合比较好用,之前一直感觉很迷糊,今天爬了爬书,把思路整理整理列了下来--


集合主要分为3类:

  • Set
  • List
  • Map
他们的通用接口:
  1.  boolean add(e); 添加元素
  2. boolean addAll(Collection e) ;讲collection e中所有元素添加到集合中
  3. boolean contains(e) 是否包含元素e;
  4. boolean containsAll(Collection e)  是否包含全部集合e中的元素
  5. void clear();清空集合
  6. remove(e) ; 删除元素
  7. removeAll(Collection e)删除所有e中包含的元素
  8. iterator() ; 范围集合的迭代器
  9. boolean retainAll(Collection c) 删除所有c中不包含的元素,有点类似两个集合求并
在讲集合前需要了解一些Iterator接口,Iterator接口是Collection的迭代器,主要作用是遍历Collection中的元素,主要提供三个方法
  1. boolean hasNext() ,如果集合没有遍历完,返回true
  2. Object next(),返回遍历所在位置的下一个元素
  3. Object remove(),返回并删除刚刚遍历的元素。
1、 Set
Set概念有点类似我们数学中的集合概念,随机无需的个体,但是不能有相重复的个体。

对Set操作的方法基本和Collection中是一样的,只是在添加的时候有相同的元素添加的时候Set中只保存一份,
例如Set.add(13),Set.add(13) ,最终Set中只有一个13.

Set中判断两个元素是否相等时通过equals来比较,如果两个元素调用equals方法返回true则认为这两个元素相等,作为相同的元素不能同时添加到同一个Set中。

HashSet是实现Set接口的一个类,主要通过元素的hashCode()返回值来确定存放的位置,具有检索快的优点。
通过时确定equals 返回true和 hashCode()返回值相等来确定两个元素为相同元素。
通常最好的方法是放入hashSet的类在重写其equals 和 hashcode()方法时应该能保证 equals返回true的两个对象其hashcode()也应该相等,这样能够精确实现HashSet所表示的精确意义。

除了HashSet,还有LinkedHashSet,这个是在具体的物理实现采用链表的方式来实现,具有更好的遍历性能,同时,相比较HashSet,LinkedHashSet因为底层采用了链表的方式实现,在添加元素的时候是有序,也是说在遍历的时候是按照加入顺序来遍历的。 
同时还有TreeSet ,这个是利用红黑树算法来实现一个有序的Set,还有一个是EnumSet,专门为枚举对象设立的Set集合,

2、List

List是一个集合,类似我们的数组,可以通过类似的顺序下表来访问集合中的值,他和Set的主要不同就是List中可以有重复的元素。
因为可以通过索引来确定元素的位置,所以相对应的有一些新的操作方法。

  1. add(e ,index)在index位置添加e;
  2. addAll(Collection c, index)在index位置添加集合c
  3. Object get(index ) 获取index位置的元素
  4. int indexOf(Object e) e在集合中第一次出现的的位置
  5. int lastIndexOf(object e) e 在集合中最后出现的位置
  6. Object remove(index )删除index位置的元素
  7. Object set(index,e)在index位置置换e元素。
  8. List subList(from,to)返回从from位置到to位置的一个新的子List

对应的有一个 ListIterator遍历器,提供 
  1. boolean hasPrevious(),返回该迭代器关联的集合是否还有上一个元素
  2. Object previous(),返回上一个元素
  3. void add()在指定的位置添加一个元素。

实现List的常用的有ArrayList,Vector(不推荐使用)

ArryaList initCapacity可以确定初始容量,在确定集合大小的情况下可以通过设定initCapacity值来提高程序的效率。

3、queue

element()返回元素,若为空,返回异常
peek()返回队首元素,若为空返回null
add()添加元素
offer()在容量有限制的情况下offer更好
poll获取队首元素并删除该队首,若为空,返回null
remove 获取队首元素,并删除该元素,若为空,返回异常。
Queue就是我们所说的先进先出的队列。
主要实现类PriorityQueue,这个并不是标准的队列,这个通过Comparable接口来确定每个元素的大小并排序,队首为最小的元素。

   Deque 双端队列,LinkedList实现这个接口,也实现了List接口,因为实现了Deque接口,可以通过LinkedList来实现Stack。
4、Map

Map就是key-value对的集合
同样实现的有HashMap,LinkedHashMap,SortedMap和TreeMap,EnumMap,其实现原理都和Set有类似的原理,如果每对key-value中value为null,那样的话Map就等价Set了。

其中需要比对是HashMap和Hashtable,一个是非线程安全,一个线程安全,非线程安全的通常都有着更好的性能,但是在多个进程对其操作时就需要考虑多线程安全的问题。

Java中还提供了一个Collections类,里面包含一个静态方法,这些静态方法可以对前面所介绍的Collection操作,包括排序,查询,修改,还有一个同步控制的方法,具体包含的方法可以查阅API,就不在这里列了。


第一篇完了,还是有些急躁,耐心不足,开始就是进步,下次努力。


0 0