------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
集合框架:为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。集合特点:
只能存储对象;长度可变;
可存储多种类型的对象(一般只存储一种类型);
集合的主要结构如下图:
在集合框架中,Collection接口和Map接口在层次结构没有任何亲缘关系,它们是截然不同的。
Collection接口的方法:
方法摘要 | ||
boolean | ||
boolean | addAll(Collection<? extends E> c) | |
void | clear() | |
boolean | ||
boolean | containsAll(Collection<?> c) | |
boolean | ||
int | hashCode() | |
boolean | isEmpty() | |
iterator() | ||
boolean | ||
boolean | removeAll(Collection<?> c) | |
boolean | retainAll(Collection<?> c) | |
int | size() | |
Object[] | toArray() | |
| toArray(T[] a) |
Collection接口
List接口:有索引,所以元素是有序的,元素可以重复;
ArrayList类:底层是数组数据结构,特点:查询速度很快,但增删稍慢,线程不同步,默认10个元素。超过10个会自动增加长度。
LinkedList类:底层是链表数据结构,查询很慢,增删速度很快,线程不同步。
Vector类:底层是数组数据结构,查询、增删都很慢。1.2之前使用Vector,而1.2出现了ArrayList,Vector逐渐被淘汰。
Set接口:元素无序,且不可以重复。
HashSet类:①底层数据结构是哈希表。线程是不同步的。
②集合元素可以是null,但只能放入一个null。
③当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该
对象在HashSet中存储位置。如果hashCode值相同的话就通过equals方法比较两个对象是否相等,若相等就不插入重复元素。
TreeSet类:①底层的数据结构是二叉树。线程是不同步的。对Set集合中的元素的进行指定(我们指定的比较器)顺序的排序。
②TreeSet支持两种排序方式,自然排序和定制排序,其中自然排序为默认的排序方式。
③TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0
④TreeSet保证集中的元素是有序的,有2种方法可以实现对象之间的可比较性:1,添加到TreeSet的对象实现了Comparable接口;2,给规则集
的元素指定一个比较器(Comparator)
LinkedHashSet类:实现了对HashSet的扩展,支持规则集内元素的排序,在HashSet中元素是没有顺序的,而在LinkedHashSet中,可以按元素插入集合的顺
序进行提取。
Map接口的方法:
方法摘要 | |
void | clear() |
boolean | containsKey(Object key) |
boolean | containsValue(Object value) |
boolean | |
int | hashCode() |
boolean | isEmpty() |
void | putAll(Map<? extends K,? extends V> m) |
int | size() |
values() |
Map接口:该集合存储键值对。一对一往里存,而且要保证键的唯一性。
Hashtable:①底层是哈希表数据结构,不可以存入null键null值,线程同步。J
②此类实现一个哈希表,该哈希表将键映射到相应的值。任何非null 对象都可以用作键或值。
③为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。
HashMap: ①基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用null 值和null键。
②除了非同步和允许使用null 之外,HashMap 类与Hashtable 大致相同。此类不保证映射的顺序,特别是它不保证该顺序恒久不变 。
将Hashtable替代。
TreeMap:①基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator(比较器)
进行排序,具体取决于使用的构造方法。
②和Set很像。其实大家,Set底层就是使用了Map集合。线程不同步。可以用于给Map集合中的键进行排序。
HashMap的遍历方法:
①通过Map.entrySet遍历key和value。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class HashMapTest {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("a", "aaaa");
map.put("b", "bbbb");
map.put("c", "cccc");
map.put("d", "dddd");
Set set = map.keySet();
for (Iterator iter = set.iterator(); iter.hasNext();) {
String key = (String) iter.next();
String value = (String) map.get(key);
System.out.println(key + "====" + value);
}
}
}
②通过Map.values()遍历所有的value,但不能遍历key。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapTest
{
public static void main(String[] args)
{
HashMap map = new HashMap();
map.put("a","aa");
map.put("b","bb");
map.put("c","cc");
map.put("d","dd");
Set set = map.entrySet();
for(Iterator iter = set.iterator(); iter.hasNext();)
{
Map.Entry entry = (Map.Entry)iter.next();
String key = (String)entry.getKey();
String value = (String)entry.getValue();
System.out.println(key +" :" + value);
}
}
}
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------