码迷,mamicode.com
首页 > 其他好文 > 详细

常用集合类简介

时间:2018-07-01 10:33:08      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:width   设置   定位   cin   ext   empty   区别   频繁   ISE   

简介

Java中集合类有很多,只介绍常用的集合类:

    技术分享图片

Collection有两个子接口:List和Set,二者主要区别在于:list数据有序存放、可重复;set中数据无序存放,不可重复。

   技术分享图片,如图,list相当于数组一样存放数据,每个数据是有下标对应的,通过下标来访问数据。

   技术分享图片,而set只是提供了一片区域用来存放数据,数据的顺序只能依靠数据本身的值来决定,所以不能有重复值出现。

Vector

  Vector类实现了一个动态数组,主要用在事先不知道数组的大小,以及需要频繁地进行查找,插入,删除工作,或者只是需要一个可以改变大小的数组的情况。

创建:

Vector类支持4种构造方法。

第一种构造方法创建一个默认的向量,默认大小为10:

Vector()

第二种构造方法创建指定大小的向量。

Vector(int size)

第三种构造方法创建指定大小的向量,并且增量用incr指定. 增量表示向量每次增加的元素数目(当该vector对象添加的元素接近原先分配的内存极限时,会以incr大小自动扩大该对象拥有的内存容量,以容纳更多的数据)

Vector(int size,int incr)

第四中构造方法创建一个包含集合c元素的向量:利用父类对象创建子类对象

Vector(Collection c) 

  常用的vector操作方法:增、删、查、改。

增:

vec.add(E element) 
将指定元素追加到此向量的末尾。 
vec.add(int index, E element) 
在此向量的指定位置插入指定的元素。 
vec.addAll(Collection c) 
将指定 Collection 中的所有元素按顺序追加到此向量的末尾。 
vec.addAll(int index, Collection c) 
在指定位置将指定 Collection 中的所有元素插入到此向量中。

删:

vec.remove(int index) 
移除此向量中指定位置的元素。 
vec.remove(value v) 
移除向量中元素值为v的元素。
vec.removeAll(Collection c) 
从此向量中移除包含在集合c 中的所有元素。 
vec.removeAllElements() 
从此向量中移除全部组件,并将其大小设置为零。 
vec.removeRange(int fromIndex, int toIndex) 
移除位于 fromIndex(包括)与 toIndex(不包括)之间的所有元素。

vec.clear() 移除所有元素。

查:

vec.get(int index)

返回向量中指定位置的元素。 
vex.indexOf(value v) 
返回v值在vec中的下标。
vec.isEmpty() 
检查该向量是否为空。 
vec.lastElement() 
返回此向量的最后一个元素。

int capacity() 
返回此向量的当前容量。

int size() 
返回此向量中的组件数。

String toString() 
返回此向量的字符串表示形式,其中包含每个元素的 String 表示形式。 
改:

vec.set(int index, E element) 
用指定的元素替换此向量中指定位置处的元素。 
vex.setElementAt(E obj, int index) 
将此向量指定 index 处的组件设置为指定的对象。 
vec.setSize(int newSize) 
设置此向量的大小。

ArrayList

ArrayList就是动态的数组,可以动态的增加和减少元素,灵活的设置数组的大小。基本与Vector一样。

Vector与ArrayList比较:

 1. 同步性
    Vectors是可同步的,是线程安全的。ArrayList是不可同步的,不是线程安全的。所以,一般单线程推荐用ArrayList,多线程中则用Vector 
2. 数据增长
    往一个ArrayList或者Vector里插入一个元素时,如果内部数组空间不够,ArrayList或Vector会扩展它的大小。Vector在默认情况下增长一倍的大小,而ArrayList增加50%的大小。

创建:

 ArrayList提供了三个构造器:

public ArrayList(); 
默认的构造器,将会以默认(16)的大小来初始化内部的数组 
public ArrayList(Collection c); 
用一个集合对象来构造,并将该集合的元素添加到ArrayList 
public ArrayList(int n); 
用指定n的大小来初始化内部的数组.

增:

方法摘要
 boolean add(E e)
          将指定的元素添加到此列表的尾部。
 void add(int index, E element)
          将指定的元素插入此列表中的指定位置。
 boolean addAll(Collection<? extends E> c)
          按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。
 boolean addAll(int index, Collection<? extends E> c)
          从指定的位置开始,将指定 collection 中的所有元素插入到此列表中。

删:

 E remove(int index)
          移除此列表中指定位置上的元素。
 boolean remove(Object o)
          移除此列表中首次出现的指定元素(如果存在)。
protected  void removeRange(int fromIndex, int toIndex)
          移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。

 

void clear()
          移除此列表中的所有元素。

 

查: 

 E get(int index)
          返回此列表中指定位置上的元素。
 int indexOf(Object o)
          返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
 boolean isEmpty()
          如果此列表中没有元素,则返回 true

 

int size()
          返回此列表中的元素数。

 

boolean contains(Object o)
          如果此列表中包含指定的元素,则返回 true

 

ArrayList支持3种遍历方式

第一种,通过迭代器遍历

Integer value = null;
Iterator iter = list.iterator();
while (iter.hasNext()) {
    value = (Integer)iter.next();
}

 第二种,随机访问,通过索引值去遍历。

Integer value = null;for (int i=0; i<list.size(); i++) {
    value = (Integer)list.get(i);        
}

第三种,for-each遍历

Integer value = null;
for (Integer integ:list) {
    value = integ;
}

改:

 E set(int index, E element)
          用指定的元素替代此列表中指定位置上的元素。

 

 Object[] toArray()
   

HashMap

这里我们先讲hashmap,具体原因等讲到hashset的时候就知道了。

  HashMap基于哈希表的 Map 接口实现,以key-value的形式存在。在HashMap中,系统 key-value 当成一个整体进行处理,系统总是根据 Hash 算法来计算 key-value 的存储位置,这样可以保证能快速存、取 Map 的 key-value 对。系统调用key的 hashCode() 方法得到其 hashCode 值——每个 Java 对象都有 hashCode() 方法,都可通过该方法获得它的 hashCode 值。得到这个对象的 hashCode 值之后,系统会根据该 hashCode 值来决定key—value的存储位置。

 

创建

 

构造方法摘要
HashMap() 
          构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap
HashMap(int initialCapacity) 
          构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap
HashMap(int initialCapacity, float loadFactor) 
          构造一个带指定初始容量和加载因子的空 HashMap
HashMap(Map<? extends K,? extends V> m) 
          构造一个映射关系与指定 Map 相同的 HashMap

 

 容量表示哈希表中桶的数量,初始容量是创建哈希表时的容量,加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度,它衡量的是一个散列表的空间的使用程度,负载因子越大表示散列表的装填程度越高,反之愈小。

 

增:

 

V put(K key, V value) 
       插入键值对。
 void putAll(Map<? extends K,? extends V> m) 
          把map中的键值对插入到hashmap中。

 

删:

 

 V remove(Object key) 
          如果此映射中存在该键的映射关系,则将其删除。

 

 void

clear() 
          从此映射中移除所有映射关系。

 

查:

 

 V get(Object key) 
          返回指定键在此标识哈希映射中所映射的值,如果对于此键来说,映射不包含任何映射关系,则返回 null

 

boolean isEmpty() 
          如果此映射不包含键-值映射关系,则返回 true
 Set<K> keySet() 
          返回此映射中所包含的键的 set 。//获取hashmap中的key集合。
Collection<V> values() 
          返回此映射所包含的值的 collection 视图。

 

 int size() 
          返回此映射中的键-值映射关系数。

 

 boolean containsKey(Object key) 
          如果此映射包含对于指定的键的映射关系,则返回 true
 boolean containsValue(Object value) 
          如果此映射将一个或多个键映射到指定值,则返回 true

 

HashSet

 

  HashSet是基于 HashMap 实现的,底层采用 HashMap 来保存数据。所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个静态的 Object 对象(向上转型,这样value就可以是各种基本类型的值了)。HashSet 的绝大部分方法都是通过调用 HashMap 的方法来实现的,因此 HashSet 和 HashMap 两个集合在实现本质上是相同的。 

 

创建:

 

HashSet hashSet = new HashSet();

 

HashSet hashset=new HashSet(collection);

 

增:

 

hashset.add(value);//向集合中添加一个元素

 

hashset.add(array[]);//把数组中的值添加到集合中

 

删:

 

删除一个元素:hashSet.remove(Object);

删除所有元素:hashSet.clear();

查:

用迭代器遍历:

Iterator it = hashSet.iterator();
  while(it.hasNext()){
   Object obj = it.next();

   然后针对obj进行一系列的操作,比如:输出值、如果obj是类对象则调用属性、方法。

}

 


 boolean contains(Object o)
          如果此 set 包含指定元素,则返回 true
 boolean isEmpty()
          如果此 set 不包含任何元素,则返回 true
 int size()
          返回此 set 中的元素的数量(set 的容量)。

 当从HashSet中访问元素时,HashSet先计算该元素的hashCode值(也就是调用该对象的hashCode())方法的返回值),然后直接到该hashCode对应的位置去取出该元素。  为了保证HashSet能正常工作,要求当两个对象用equals比较相等时,hashCode也要相等,否则就会有可能加入两个相同的项。

HashSet的特点:

(1)HashSet不是同步的,多个线程访问是需要通过代码保证同步

(2)集合元素值可以为null。

 

常用集合类简介

标签:width   设置   定位   cin   ext   empty   区别   频繁   ISE   

原文地址:https://www.cnblogs.com/huangdabing/p/9249233.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!