框架图镇博
一个集合对象或一个容器表示一组对象,集合中的对象称为元素。
上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法。它的一个子接口LinkedIterator在它的基础上又添加了三种方法,分别是add(),previous(),hasPrevious()。也就是说如果是先Iterator接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历后的元素不会在遍历到,通常无序集合实现的都是这个接口,比如HashSet,HashMap;而那些元素有序的集合,实现的一般都是LinkedIterator接口,实现这个接口的集合可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个元素,比如ArrayList。
怎么理解呢,我的理解就是集合类就相当于动态数组。无非java将几种常用的数据结构分为几种不同的集合类,再配合泛型进行使用,规范了数组的输入和使用。
我们来细分一下结构图
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
我们先来讲讲相对简易的List.
List 接口继承了 Collection 接口以定义一个允许重复项的有序集合
//存取函数
void add(int index, Object element)
boolean addAll(int index, Collection collection)
Object get(int index)
Object remove(int index)
Object set(int index, Object element)
//查找函数
int indexOf(Object element)
int lastIndexOf(Object element)
//遍历
ListIterator listIterator()
ListIterator listIterator(int startIndex)
//截取子列
List subList(int fromIndex, int toIndex)
实例代码:
public static void main(String args[])
{
List<String> list1=new ArrayList<String>();
list1.add("周二");
list1.add(1,"张三");
list1.add("李四");
Iterator<String>Itr=list1.iterator();
while(Itr.hasNext())
System.out.println(Itr.next().toString());
System.out.println("-----------------");
list1.set(0, "王五");
Itr=list1.iterator();
while(Itr.hasNext())
System.out.println(Itr.next().toString());
list1.remove(1);
System.out.println("-----------------");
Itr=list1.iterator();
while(Itr.hasNext())
System.out.println(Itr.next().toString());
list1.addAll(list1);
System.out.println("-----------------");
Itr=list1.iterator();
while(Itr.hasNext())
System.out.println(Itr.next().toString());
list1.removeAll(list1);
}
运行结果:
Set
public interface Set<E>extends Collection<E>
{
int size();
boolean contains(E);
boolean add(E);
boolean remove(E);
Iterator<E> iterator();
//批处理操作
boolean containAll(Collection<?> c);
boolean addAll(Collection<?> c);
boolean removeAll(Collection<?>c);
//使当前集合只保留c的元素
boolean retainAll(Collection<?>c);
void clear();
}
具体使用方法和List没有太大的差别,值得注意的是:
Set接口有三个使用的类,即:
//HashSet是无序的存储。访问效率快
Set<String> s =new HashSet<String>();
//TreeSet中实现了SortedSet,可进行升序排列
Set<String> s=new TreeSet<String>();
//LinkHashSet具有固定的顺序
Set<String> s=new LinkedHashSet<String>();
//其实所有的集合类都可以用Collection中的排序方法进行排序 后来会细讲
至于Queen用的不是很多,就不多说了。
再来看看比较常用的Map
常用操作:
//返回值是被替换的值。
Object put(Object key, Object value);
Object remove(Object key);
void putAll(Map mapping);
void clear();
Object get(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
int size();
boolean isEmpty();
//下面的方法允许您把键或值的组作为集合来处理
public Set keySet();
public Collection values();
public Set entrySet();
引用方法
//有序树,存在SortedMap结口
Map<String,String>m= new TreeMap<String,String>();
//无序树,并允许有空的键值
Map<String,String>m= new HashMap<String,String>();
//同步的HashTable
Map<String,String>m= new Hashtable<String,String>();
这里面最大的问题就是:
HashMap和Map的区别。ArrayList和List的区别
答:Map,List都只是接口,一个没有被实现的抽象类,Java 集合框架中一部分,用于存储键值对,HashMap,ArrayList是用哈希算法实现Map,List的实用类。