java中的集合框架Set 、List 、Map

java中的集合框架主要包含这三大块,我们所要掌握的主要是这三个接口及其实现类的使用方法;

首先要说的是Set  List是从Collection继承而来,而Map则不是从它继承;

对于Collection接口,有以下从教材摘抄的内容:

Collection是集合框架中最根本的一个接口,它代表了各式各样的对象集合,

Collection接口中的方法分为以下几类:

(1)单元素的添加 、删除操作

  • boolean add(Object o)  将对象添加给集合
  • boolean remove(Object o) 如果集合中有与O相匹配的对象,则将其删除

(2)查询操作

  • int size() 返回当前集合中元素的数量
  • boolean isEmpty() 判断集合中是否含有任何元素
  • boolean contains(Object o) 查找集合中是否含有对象o
  • Iterator iterator() 返回一个迭代器,用来访问集合中的各个元素
(3)组操作,作用于元素组或整个集合

  • bool containsAll(Collection c) 查找集合中是否含有集合c中所有元素
  • bool addAll(Collection c) 将结合c中所有元素添加给该集合
  • void clear()  删除集合中所有元素
  • void removeAll(Collection c) 从集合中删除c中所有元素
  • void retainAll(Collection c)  从结合中删除c中不包含的元素
(4)Collection 转换为Object数组

  • Object [ ] toArray() 返回一个内含集合所有元素的array

注意:可以把集合转换为任何其他的对象数组,但是,不能直接把集合转换成基本数据类型的数组,因为集合必须持有对象。

Set:是一个集合,其内部不可以有重复的元素,

它是继承自Collection的接口,它关心唯一性,是没有重复项目的集合,Set中没有引入新方法,所以Set是一个Collection,只不过其行为有所不同。对于Set对象,

利用迭代器获取的元素的顺序是不确定的,Set是独一无二的Collection。

Set常用的实现类有HashSet和TreeSet。

这类有一个个人写的一个例子程序

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;


public class SetDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Set set=new HashSet();
		set.add("a");
		set.add("b");
		set.add("c");
		Iterator iter=set.iterator();
		while(iter.hasNext()) System.out.println(iter.next());
		//System.out.println(set);
	}

}
List接口:列表   可以包含重复元素

List接口代表一种有序的集合,也是Collection的子接口,它关心的是索引,List对象可以包含重复元素,List可以从列表的头部或尾部开始搜索元素,

如果找到所搜索元素,还将报告元素所在的位置,其具体的实现类有ArrayList,Vector,LinkedList,附带有一个重要的集合框架中的实用类Arrays

List中新增的方法

  • boolean addAll(int index ,Collection c)  将集合c的所有元素添加的集合index位置,原先位置及其后面的元素按次后移
  • Object get(int index)   返回index位置的元素
  • Object set(int index ,Object element)  用所给的对象element替换指定位置的元素,返回被替换的元素
  • void add(int index,Object element) 在指定位置插入对象element,而原先位置及其后面的元素依次后移
  • Object remove(int index)从List中删除指定位置的元素,原先位置及其后面的元素依次左移,返回被删除的元素
  • int indexOf(Object o)  返回对象o在List中第一次出现的索引值,如果o 不是List的元素,返回-1
  • int lastIndexOf(Object o)返回对象o在List中最后出现的索引值,如果o 不是List的元素,返回-1
  • ListIterator listIterator()  按顺序返回List 中元素的一个列表迭代器
  • ListIterator listIterator(int index)  按顺序返回List 中从index位置开始的元素的一个列表迭代器
  • List subList(int formindex  ,int  toindex)  返回从formindex到toindex的元素组成的一个List

ArrayList:是一个可变长度的数组,实现了LIst接口,因此他可以包含重复元素和Null元素,也可以任意的访问和修改元素,由ArrayList类实现的List集合采用数组结构

保存对象,ArrayList类封装了一个动态再分配的Object [ ]数组,每一个ArrayList对象都有一个capacity,表示存储列表所有元素的数组的容量,当元素添加的ArrayList时他的

capacity在常量时间内自动增加

它有以下常用的方法:

  • add()
  • remove()
  • Contains()
  • ToArray()   这个方法把ArrayList的元素Copy到一个新的数组中
  • ensureCapacity(int  minCapacity) 将ArrayList对象容量增加minCapacity
  • trimToSize() 整理ArrayList对象容量调整为列表当前大小

具体的方法可以参考Api文档,这里有个例子程序

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;


public class ListDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Set set=new HashSet();
		set.add("a");
		set.add("b");
		set.add("c");
		List list=new ArrayList();
		//list.addAll(set);
		list.add("d");
		list.add("e");
		list.add("f");
//		System.out.println(list);
//      System.out.println(list.contains("a"));
//		System.out.println(list.get(1));
//		System.out.println(list.indexOf("f"));
//		Iterator iter=list.iterator();
//		System.out.println(iter.next());
//		Object [] rt=list.toArray();
//		for(int i=0;i<rt.length;i++)
//			System.out.println(rt[i]);
//		System.out.println(list.size());
//		for(int i=0;i<list.size();i++)
//			System.out.println(list.get(i));
	}

}
Vector :向量,是直接继承AbstractList的一个类,是可增长的对象数组,用法与ArrayList非常相似,这里不做过多介绍

LinkedList:链表,它实现了List接口,允许null元素。内部实现是链表,适合于在链表中间需要频繁的进行插入和删除操作,用法与ArrayList也很相似

附带:Arrays

Arrays是集合框架中很实用的公用类,包含有一个方法,用于从特定的对象数组生成一个Collection对象,它还是java的一种用于处理数组的特殊的实用类,这个类

提供了对数组的填充、查找、比较、排序等一系列的对数组的操作

  1. java.util.Arrays.asList()方法返回一个List对象,它含有数组的元素,该数组是传递给此方法的,为快速构建Collection对象提供了一种方便的 机制
有段例子代码如下:

import java.util.*

public class Test{

           public static void main(){

             Collection cl=Arrays.asList(new  String[ ]{"a"  ,"b"  "c"});

             System.out.println(cl);

}

}

      2.处理数组的静态使用方法

  • Arrays.fill(type [ ] a,type val); 对数组进行填充,就是简单的把一个数组的全部或者某段数据填成一个特殊的值
  • Arrays.binarySearch(type [ ] a,type val);就是在某类型的数组中用二分法查找特定的key的元素,返回元素索引值,前提是这个数组是经过排序的
  • Arrays.equals(type [ ] a,type [ ] b);对两个数组进行比较,相等则返回true,否则false
  • Arrays.sort(type [ ] a)  ;对数组排序的
有关他的例子程序详细如下

import java.util.Arrays;
import java.util.Collection;
import java.util.List;


public class ArraysDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        String [] a={"a","b","c"}; 
//		List list=Arrays.asList(a);
//		System.out.println(list);
//		Collection cl=Arrays.asList(a);
//		System.out.println(cl);
//		Arrays.fill(a, "f");
//		for(int i=0;i<a.length;i++)
//			System.out.println(a[i]);
        String [] s={"1","2","3"};
        System.out.println(Arrays.equals(a, s));
	}

}
Map接口:俗称映射,是一个保存了一组键值对应关系的对象,集合中不能包含重复的键,即一个键只能对应一个值,使用put(K key ,V value)方法时,如果key存在,则新的value会取代旧的value值

其实现类有 HashMap、TreeMap:在Map 中插入、删除、定位元素,HashMap是最好的选择,HashMap通过hashcode对其内容进行查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果需要一个有序结果。就应该使用TreeMap(HashMap 中元素的排列顺序是不固定的)

  Map 接口中常用的方法

添加、删除操作

  • Object  put(Object key ,Object value ):将互相关联的一个关键字和一个值放入该对象,如果该关键字已存在,那么与此关键字相关的新值将取代旧值,如果该关键字不存在,则返回null
  • Object   remove(Object  key)从映像中删除与key相关的映射
  • void putAll(Map t)   将来自特定映像的所有元素添加给该映像
  • void  clear()从映像中删除所有映射
查询操作

  • Object  get(Object   key) 获得与此关键字key相关的value
  • boolean  containsKey(Object  key)  判断映像中是否存在关键字key
  • boolean  containsValue(Object  value) 判断映像中是否存在值value
  • int  size()   返回当前映射的数量
  • boolean isEmpty()  判断当前映射中是否含有任何映射
视图操作:处理映射中键/值对组

  • Set keySet()  返回映射中所有关键字的视图集
  • Collection  values()  返回映射中所有值的视图集
  • Set entrySet()返回整个映射的视图集
下面是一个例子程序

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;


public class MapDemo {

	/**
	 * @param args
	 */
	private int grade;
	private String name;
	MapDemo(){}
	MapDemo(String name,int grade){
		this.name=name;
		this.grade=grade;
		}
	public static void printcl(Collection cl){
        Iterator iter=cl.iterator();
        while(iter.hasNext())
        	System.out.println(iter.next());
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
          HashMap map=new HashMap();
          map.put("li", new MapDemo("lisi",90));
          map.put("zhang", new MapDemo("zhangsan",91));
          map.put("wang", new MapDemo("wangwu",92));
//		  System.out.println(map);
          Set set1=map.keySet();
//          printcl(set1);
          Iterator iter=set1.iterator();
          while(iter.hasNext()){
//        	  System.out.println(iter.next());
        	  MapDemo mapdemo=(MapDemo)map.get(iter.next());
        	  System.out.println(mapdemo.grade);
          }
//          System.out.println(set1);
//          Set set2=map.entrySet();
//          System.out.println(set2);
//          Collection cl=map.values();
//          System.out.println(cl);
         
	}

}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值