欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《集合》总结

程序员文章站 2022-07-08 10:45:14
...

1、集合框架总体结构分3种:
 ①Set接口:提供一个无序的集合
 ②List接口:提供一个有序的集合
 ③Map接口:提供一个映射关系的集合数据结构

PS:在JDK5中提供了Queue接口来提供基于队列的集合体系。

下面介绍一下主要的方法:
 ①boolean add(E o):向集合中添加对象
 ②void clear():清空集合
 ③boolean remove(Object o):从集合中移除一个对象
 ④int size():获取集合中对象的个数


2、下面来介绍一下Set接口:
 Set:由于是无序的,所以算是最简单的一种集合,只是简单的把对象加入到集合中,就像往口袋里放东西一样的!
 Set接口的实现方法:代码如下
 

	/**
	 * 删减集合元素的方法
	 */
	public void delete(Set<Student> set, int score) {
		// 实例化迭代器,把集合里的元素取出来放到另外一个集合里,在原来的集合删掉现在的集合!!达到remove的效果
		System.out.println("移除低于" + score + "分的学生");
		Iterator it = set.iterator();
		Set<Student> newset = new HashSet<Student>();
		for (int i = 0; i < set.size(); i++) {
			if (it.hasNext()) {
				Student stu = (Student) it.next();
				// 当取得的对象分数小于所要的分数,就添加到新的集合里面
				if (stu.getScore() < score) {
					newset.add(stu);
				}
			}
		}
		// 旧的集合移除新的集合!!只是移除集合里面的地址。
		set.removeAll(newset);
	}

 

/**
	 * 改变集合元素的方法,根据所得到的学号来改分数
	 * 
	 * @param score指的是要改变的分数值
	 * @param set是要改的集合
	 * @param num是指要操作的学号
	 */
	public int change(Set<Student> set, String num, int score) {
		// 先实例化一个迭代器
		System.out.println("改变学号为:" + num + "的学生的学分为" + score);
		Iterator it = set.iterator();
		while (it.hasNext()) {
			// 强制转换成学生类
			Student stu = (Student) it.next();
			// 根据学号取得的学生类进行设置学分!
			if (stu.getNum() == num) {
				stu.setScore(score);
				
			}
		}
		return score;
	}
/**
	 * 添加set集合元素的方法
	 * @return 一个Set集合
	 * 
	 */
	public Collection getSet(int userCount){
		//实例化一个Set集合
		Set s = new HashSet();
		//循环实例化对象,并添加到Set集合里
		for(int i = 0;i<userCount;i++){
			Student u = new Student("用户——"+((char)(65+i)),i+1);
			s.add(u);
		}
		return s;
	}

    


3、List接口:
 List:主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和结尾!
 List接口的实现方法:代码如下

	/**
	 * 删减集合元素的方法
	 */
	public void delete(List<Student> list, int score) {
		// 实例化迭代器,把集合里的元素取出来放到另外一个集合里,在原来的集合删掉现在的集合!!达到remove的效果
		System.out.println("移除低于" + score + "分的学生");
		//Iterator it = list.iterator();
		//List<Student> newlist = new ArrayList<Student>();
		for (int i = 0; i < list.size(); ) {
		        Student stu = list.get(i);
		//注意,当移除了一个元素之后,链表就直接少了一个,同样的索引值现在是后一个往前移,所以就不用i++,如果没有移除,就执行i++
		        if(stu.getScore()<score){
			list.remove(i);
		        }else{
			i++;	
		        }
			
			
		}

 

 


4、Map接口:
 Map:存入的对象是一对一对的,而不是像之前介绍的List和Set一样,是一一对应的对象。
      Map存放两种对象:一种称为key(键),一种称为value(值),这一对对象在Map中称为一个Entry(项)
 PS:Map中的key不能重复,但是值可以重复!
 Map接口实现方法:代码如下

/**
	 * 创建一个Map集合,并往里添加对象
	 * @return Map集合
	 */
	public Map<String,Student> createTable(){
		//实例化一个Map集合
		Map userMap = new HashMap();
		//循环添加对象
		for(int i = 0;i<6;i++){
			Student us = new Student("1"+i,i+50);
			userMap.put(""+i,us);
		}
		return userMap;
	}

 

/**
	 * 输出Map集合的方法
	 * @param um Map集合
	 */
	private void printMap(Map<String, Student> um) {
		//实例化一个Set集合,用来存储Map的key键
		Set<String> set = um.keySet();
		Iterator<String> it = set.iterator();
		//循环输出
		while(it.hasNext()){
			String key = it.next();
			Student uf = um.get(key);
			uf.show();
		}
	}

 


PS:所有的集合都支持泛型定义!