集合框架

集合框架这种类的功能,是实现各种各样方式的数据存储。这样一组专门存储其他对象的类,一般称为对象容器类,简称容器类。这组类和接口的设计结构称为集合框架(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);
		}
		
	}

}

转载于:https://my.oschina.net/bugkiller/blog/597137

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值