集合框架这种类的功能,是实现各种各样方式的数据存储。这样一组专门存储其他对象的类,一般称为对象容器类,简称容器类。这组类和接口的设计结构称为集合框架(Collection Framework)。
为了使整个集合框架中的类便于使用,在设计集合框架时会大量使用接口。实际实现的功能类实现对应的接口。这样可以保证各个集合类的使用方式统一。
在集合框架中,提供两种存储方式:
1,按照索引值操作数据
在这种方式中,为每个存储的数据设置一个索引值。在操作数据的时候,按照索引值操做对应的数据。实现这种方式的集合类都要实现java.util.Collection接口。
2,按照名称操作数据
在这种存储方式中,为每个存储的数据都设定一个名称(任意非null的对象都可以作为名称),以后按照该名称操作该数据,要求名称不能重复,每个名称对应唯一一个值。这种存储的方式成为名称--数值对,也就是名值对存储。实现这种方式的几个类都实现java.util.Map接口。
这里“按照索引值操作数据”的存储方式,又按照容器内部是否是重复的元素,分为两类:
(1)允许存储重复元素
在这种存储元素中,所有的类都实现java.util.List接口。
(2)不允许存储重复元素
在这种存储元素中,所有的类都实现java.util.Set接口。
这样集合框架中的类就分为三类:
A,List系列
该系列中的类使用索引值来操作数据,允许存储重复元素
B,Set系列
该系列中的类使用索引值来操作数据,不允许存储重复元素
C,Map系列
该系列中的类按照名称来操作数据,名字不可以重复,值可以重复,一个名称对应唯一的一个值。
一,List系列
List系列的类都是实现List接口,大部分都类都是以List作为类名的后缀。该系列的类中,常见的有两个ArrayList和LinkedList。其中ArrayList是以数组为基础实现的List,而LinkedList是以链表为基础实现的List,ArrayList拥有数组的优点。而LinkedList用于链表的优点。
a,add方法
boolean add(Object o);---->此方法的作用是追加对象o到已有容器的末尾。
另一个add方法:void add(int index,Object element); ---->此方法的作用是将对象element插到索引值为index的位置,容器中元素向后移。
b,addAll方法
boolean addAll(Collection c);---->此方法的作用是将容器c中的元素依次添加到当前容器的末尾。
另一个add方法:void addAll(int index,Collection c);---->此方法的作用是将容器c中的第一个元素插入到当前容器index索引值位置,第二个元素插入到index+1位置,依次类推。
c,get方法
Object get(int index)
该方法的作用是返回当前容器对象中索引值是index的元素内容。
d,indexOf方法
int indexOf(Object o)
该方法的作用是查找当前容器中是否存在对象o,如果存在则返回该元素第一次在容器中出现的索引值,如果不存在返回-1。
e,remove方法
Object remove(int index)
该方法的作用是删除容器中索引值是index的对象内容,如果删除成功,则返回被删除对象的内容
另一remove方法
boolean remove(Object o)
该方法的作用是删除对象内容为o的元素,如果相同的对象有多个,则只能删除索引值最小的对象。如果删除成功则返回true,否则返回false。
f,set方法
Object set(int index,Object element)
该方法的作用是修改索引值是index的内容,将index的内容修改成element的内容。
g,size方法
int size()
该方法的作用是返回当前容器中已经存储的有效元素的个数。
h,toArray方法
Object[] toArray()
该方法的作用是将当前容器中的元素按照顺序转换成一个Object数组
package org.panda.ArrayList;
import java.util.ArrayList;
public class ArrayListDemo01
{
public static void main(String[] args)
{
//容器对象的初始化
ArrayList list = new ArrayList() ;
//向容器中添加元素
list.add("a") ;
list.add("b") ;
list.add("c") ;
list.add("1") ;
list.add("2") ;
list.add("3") ;
list.add(1,"23") ;
list.set(0,"24") ;
list.remove("1") ;
int size = list.size() ;//获得有效个数
for(int i=0;i<size;i++)
{
System.out.println(i);//返回一个字符串
}
System.out.println(list) ;
}
}
二,Set系列
Set系列中的类都实现Set接口,该系列中的类都是以set作为类名的后缀。该系列中的容器类,不允许存储重复的元素。也就是当容器中已经存储一个相同的元素的时候,无法实现添加一个完全相同的元素,也不能将已有元素修改成和其他元素相同。
该系列中常见的类有:
1,CopyOnWriteArraySet---->以数组为基础实现的Set类。
2,HashSet ---->以哈希表为基础实现的Set类。
3,LinkedHashSet ---->以链表为基础实现的Set类。
4,TreeSet ---->以树为基础实现的Set类。
以不同数据结构类型实现的Set类,用于不同数据结构类型的特性,在实际使用时,根据逻辑需要选择对应的Set类。
Set系列中类的方法要不List系列中类的方法要少的。例如不支持插入和修改。而且对于Set系列中遍历元素,也需要转换为专门的Iterator(迭代器)对象才能实现遍历。遍历的顺序和Set中存储的数据会不同。
package org.panda.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetDemo01
{
public static void main(String args[])
{
//容器对象初始化
Set set = new HashSet() ;
//向容器中添加元素
set.add("a") ;
set.add("b") ;
set.add("c") ;
set.add("1") ;
set.add("2") ;
//删除元素
set.remove("c") ;
//遍历
Iterator iterator = set.iterator() ;
while(iterator.hasNext())
{
System.out.print(iterator.next());
}
}
}
三,Map系列
Map系列中的类都实现了Map接口。该系列中的部分类以map为类名后缀。该系列容器类中存储元素的方式,跟List和Set完全不同。
Map提供了提供了一种“名称:值”这样的名称和数值对存储数据的方法。在该存储方式中,名称不可以重复,但是不同的名称可以存储相同的数值。
在这种存储结构中,任何不为null的对象都可以作为一个名称(key)来作为存储的值(value)的标识。使用这种形式更利于存储比较零散的数据。也方便数据的查找和获得。Map类中存储的数据没有索引值。系统会以一定的形式索引存储的名称。
该系列中常见的类:
1,HashMap ---->以哈希表为基础实现的类
2,LinkedHashMap ---->以链表为基础实现的类
3,TreeMap ---->以树为基础实现的类。
该系列的类中常见的方法:
a , get方法
Object get(Object key) ---->该方法的作用是获取到该容器中名称为key对应的值。
b , keySet方法
Set keySet() ----> 该方法的作用是返回当前容器中所有名称。将所有的名称以Set的形式返回。使用这个方法可以实现对Map容器中所有元素的遍历。
c ,put方法
Object put(Object key,Object value) ---->该方法的作用是将值value以名称key的形式存放到Map容器中。
d ,remove方法
Object remove(Object key) ---->该方法的作用是删除容器中名称为key的值。
e ,values方法
Collection values() ---->该方法的作用是返回当前容器中所有值组成的集合。以Collection形式返回。
package org.panda.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapDemo01
{
public static void main(String[] args)
{
//容器对象初始化
Map map = new HashMap() ;
//存储数据
map.put("IronMan","20") ;
map.put("SuperMan","30") ;
map.put("Hoke",33) ;
//删除数据
map.remove("Hoke") ;
//修改元素之
map.put("SuperMan","10") ;
//获得元素个数
int size = map.size() ;
System.out.print(size);
//遍历Map
Set set = map.keySet();
Iterator iterator = set.iterator() ;
while(iterator.hasNext())
{
String name = (String)iterator.next() ;
String value = (String)map.get(name) ;
System.out.println(name+value);
}
}
}