关闭

java集合笔记

48人阅读 评论(0) 收藏 举报
分类:

Collection接口:是List、Set、Queue接口的父接口,定义了可用于操作List、Set、Queue的方法----增删改查

List接口及其实现------ArrayList,List是元素有序并且可以重复的集合,被称为序列。

Set接口实现------HashSet,Set是元素无序并且不可重复的集合,被称为集。HashSet哈希集是Set的一个重要实现类。


Map接口:Map接口提供了一种映射关系,其中元素是以键值对的形式存储的,能够实现根据key快速查找value。

                  Map中的键值对以Entry类型的对象实例形式存在,key不可重复,value可以。Map支持泛型,形式:Map<K,V>

                  HashMap类是Map的一个重要实现类,基于哈希表实现,HashMap中的Entry对象是无序排列的。


简单的学生选课实例:

package com.collection;

public class Course {
	
	String id;
	String name;
	
	public Course(String id,String name){
		this.id=id;
		this.name=name;
	}
	public Course(){
		
	}
}

package com.collection;

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

public class Student {
	
	String id;
	String name;
	
	public Set courses;
	
	public Student(String id,String name){
		this.id=id;
		this.name=name;
		this.courses=new HashSet();
	}

}
package com.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.zip.CRC32;

import org.w3c.dom.ls.LSInput;

public class ListTest {
	
	public List coursesToSelect;
	
	//List是一个接口,创建其子类ArrayList实例化用于存放备选课程
	public ListTest(){
		this.coursesToSelect=new ArrayList();
	}
	
	//用于往coursesToSelect中添加备选课程
	public void testAdd(){
		//创建一个课程对象,并通过调用add方法,添加到备选课程List中
		Course cr1=new Course("1", "数据结构");
		coursesToSelect.add(cr1);
		
		//当一个对象被添加到集合中,是会忽略它本来的类型的,只会把它当做一个Object类型
		Course temp=(Course)coursesToSelect.get(0);//通过get方法取得
		System.out.println("添加了课程:"+temp.id+","+temp.name);
		
		Course cr2=new Course("2", "C语言");
		coursesToSelect.add(0, cr2);//在对列顶部添加
		Course temp2=(Course)coursesToSelect.get(0);
		System.out.println("添加了课程:"+temp2.id+","+temp2.name);
		
		//List中元素是可以重复添加的
		
//		以下方法会抛出数组下标越界异常
//		Course cr3=new Course("3", "test");
//		coursesToSelect.add(4,cr3);
		
		Course[] course={new Course("3", "离散数学"),new Course("4", "汇编语言")};
		coursesToSelect.addAll(Arrays.asList(course));
		Course temp3=(Course)coursesToSelect.get(2);
		Course temp4=(Course)coursesToSelect.get(3);
		System.out.println("添加了两门课程"+temp3.id+","+temp3.name+
				";"+temp4.id+","+temp4.name);
		
		Course[] course2={new Course("5", "高等数学"),new Course("6", "大学英语")};
		coursesToSelect.addAll(2, Arrays.asList(course2));
		Course temp5=(Course)coursesToSelect.get(2);
		Course temp6=(Course)coursesToSelect.get(3);
		System.out.println("添加了两门课程"+temp5.id+","+temp5.name+
				";"+temp6.id+","+temp6.name);
	}
	
	//取得List中元素的方法
	public void testGet(){
		int size=coursesToSelect.size();//首先取得List的长度
		System.out.println("有如下课程待选:");
		for(int i=0;i<size;i++){
			Course crf=(Course)coursesToSelect.get(i);
			System.out.println("课程"+crf.id+","+crf.name);
		}
	}
	
	//通过迭代器类遍历List
	public void testIterator(){
		
		Iterator it=coursesToSelect.iterator();
		System.out.println("待选课程如下(通过迭代器访问):");	
		while(it.hasNext()){
			Course cr=(Course)it.next();
			System.out.println("课程"+cr.id+","+cr.name);
		}
	}
	
	//通过for eache方法遍历
	public void testForEach(){
		System.out.println("通过for each取得待选课程:");
		for(Object obj:coursesToSelect){
			Course cr=(Course)obj;
			System.out.println("课程"+cr.id+","+cr.name);
					
		}
	}
	
	//修改课程
	public void testModify(){
		coursesToSelect.set(4, new Course("7", "毛概"));
	}
	
	//删除课程
	public void testRemove(){
//		Course cr=(Course)coursesToSelect.get(4);
//		System.out.println("我是课程:"+cr.name+"我即将被删除");
//		coursesToSelect.remove(4);
//		System.out.println("删除成功");
		
		//删除多个元素
		Course[] courses={(Course)coursesToSelect.get(4),(Course)coursesToSelect.get(5)};
		coursesToSelect.removeAll(Arrays.asList(courses));
	}
	
	public static void main(String[] args){
		ListTest listTest=new ListTest();
		listTest.testAdd();
		listTest.testGet();
		listTest.testIterator();
		listTest.testForEach();
		listTest.testModify();
		listTest.testForEach();
		listTest.testRemove();
		listTest.testForEach();
 	}
}

package com.collection;

import java.util.ArrayList;
import java.util.List;

public class testGeneric {
	
	//带有泛型Course的List类型属性
	public List<Course> courses;

	//构造器,初始化List属性呢
	public testGeneric(){
		courses=new ArrayList<Course>();
	}
	
	public void testAdd(){
		Course cr1=new Course("1", "大学语文");
		courses.add(cr1);
		//泛型集合中不能添加泛型类型及其子类型之外的对象,否则会报错
		Course cr2=new Course("2", "java基础");
		courses.add(cr2);
	}
	
	//遍历
	public void testForEach(){
		for(Course cr:courses){
			System.out.println(cr.id+cr.name);
		}
	}
	
	//测试泛型集合可以添加泛型子类型的实例
	public void testChild(){
	childCourse ccr=new childCourse();
	ccr.id="3";
	ccr.name="我是子类型的课程对象实例值";
	courses.add(ccr);
}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		testGeneric tg=new testGeneric();
		tg.testAdd();
		tg.testForEach();
		tg.testChild();
		tg.testForEach();
	}

}

package com.collection;

//测试泛型集合可以添加泛型子类型的实例
public class childCourse extends Course{
	

public static void main(String[] args){

	
}

}

package com.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
//测试Set方法
public class SetTest {
	
	public List<Course> coursesToSelect;
	
	public SetTest(){
		coursesToSelect=new ArrayList<Course>();
	}
	
	public void testAdd(){
		//创建一个课程对象,并通过调用add方法,添加到备选课程List中
		Course cr1=new Course("1", "数据结构");
		coursesToSelect.add(cr1);
		
		//当一个对象被添加到集合中,是会忽略它本来的类型的,只会把它当做一个Object类型
//		Course temp=(Course)coursesToSelect.get(0);//通过get方法取得
//		System.out.println("添加了课程:"+temp.id+","+temp.name);
		
		Course cr2=new Course("2", "C语言");
		coursesToSelect.add(0, cr2);//在对列顶部添加
//		Course temp2=(Course)coursesToSelect.get(0);
//		System.out.println("添加了课程:"+temp2.id+","+temp2.name);
//		
		//List中元素是可以重复添加的
		
//		以下方法会抛出数组下标越界异常
//		Course cr3=new Course("3", "test");
//		coursesToSelect.add(4,cr3);
		
		Course[] course={new Course("3", "离散数学"),new Course("4", "汇编语言")};
		coursesToSelect.addAll(Arrays.asList(course));
//		Course temp3=(Course)coursesToSelect.get(2);
//		Course temp4=(Course)coursesToSelect.get(3);
//		System.out.println("添加了两门课程"+temp3.id+","+temp3.name+
//				";"+temp4.id+","+temp4.name);
//		
//		Course[] course2={new Course("5", "高等数学"),new Course("6", "大学英语")};
//		coursesToSelect.addAll(2, Arrays.asList(course2));
//		Course temp5=(Course)coursesToSelect.get(2);
//		Course temp6=(Course)coursesToSelect.get(3);
//		System.out.println("添加了两门课程"+temp5.id+","+temp5.name+
//				";"+temp6.id+","+temp6.name);
	}
	
	public void testForEach(){
		System.out.println("通过for each取得待选课程:");
		for(Object obj:coursesToSelect){
			Course cr=(Course)obj;
			System.out.println("课程"+cr.id+","+cr.name);
					
		}
	}
	
	public static void main(String[] args){
		SetTest test=new SetTest();
		test.testAdd();
		test.testForEach();
		//创建一个student对象
		Student st=new Student("1", "小明");
		System.out.println("欢迎学生"+st.name+"选课!");
		//创建一个Scanner对象,用来接收键盘输入的课程ID
		Scanner console=new Scanner(System.in);
		
		for(int i=0;i<3;i++){
			System.out.println("请输入课程ID");
			String courseId=console.next();
			
			for(Course cr : test.coursesToSelect){
				if(cr.id.equals(courseId)){
					st.courses.add(cr);
				}			
			}
		}
	for (Course cr : st.courses) {
		System.out.println("选择了课程"+cr.id+cr.name);
		
	}			
	}
}


package com.collection;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class MapTest {

	//承装学生类型对象
	public Map<String, Student> students;
	
	//在构造器中初始化student属性
	public MapTest(){
		this.students=new HashMap<String,Student>();
	}
	
	//测试添加:输入学生id
	public void testPut(){
		//获取学生id和姓名
		Scanner console=new Scanner(System.in);
		int i=0;
		while(i<3){
			System.out.println("请输入学生ID");
			String ID=console.next();
			//判断是否被占用
			Student st=students.get(ID);
			if(st==null){
				//提示输入姓名
				System.out.println("请输入学生姓名");
				String name=console.next();
				//创建新的学生对象
				Student newStudent=new Student(ID, name);
				//通过调用student的put方法添加id--学生映射
				students.put(ID, newStudent);
				System.out.println("成功添加"+students.get(ID).name);
				i++;
			}else{
				System.out.println("该学生ID已经被占用");
				continue;
			}
			
		}
	}
	
	//测试Map的keySet方法
	public void testKeySet(){
		//通过keySet方法,返回Map中的所有“键”的Set集合
		Set<String>keySet=students.keySet();
		//取得student的容量
		System.out.println("总共有"+students.size()+"个学生");
		//遍历keySet,取得每一个键,再调用get方法取得每个键对应的value
		for(String stuId: keySet){
			Student st=students.get(stuId);
			if(st!=null){
				System.out.println("学生"+st.name);
			}
		}
	}
	
	//测试删除Map中的映射
	public void testRemove(){
		while(true){
		System.out.println("请输入要删除的学生ID");
		Scanner console=new Scanner(System.in);
		String ID=console.next();
		//判断该ID是否存在
		Student st=students.get(ID);
		if(st==null){
			System.out.println("该ID不存在,请重新输入要删除的学生ID");
			continue;
		}
		students.remove(ID);
		System.out.println("成功删除学生"+st.name);
		break;
		}
	}
	
	//通过entrySet方法来遍历Map
	public void testEntrySet(){
		//通过entrySet方法,返回Map中的所有键值对
		Set<Entry<String,Student>>entrySet=students.entrySet();
		for (Entry<String, Student> entry : entrySet) {
			System.out.println("取得键"+entry.getKey());
			System.out.println("对应的值为"+entry.getValue().name);
		}
		
	}
	
	//使用put方法修改Map中已有映射
	public void testModify(){
		//提示要修改的ID
		System.out.println("请输入要修改的学生id");
		Scanner console=new Scanner(System.in);
		while(true){
			//取得键盘输入的id
			String stuId=console.next();
			//从students中查找学生id对应的学生对象
			Student student=students.get(stuId);
			if(student==null){
				System.out.println("该id不存在,请重新输入");
				continue;
			}
			//提示当前对应的学生对象的姓名
			System.out.println("当前该学生ID所对应的学生为"+student.name);
			//提示输入新的学生姓名来修改已有的映射
			System.out.println("请输入新的学生姓名");
			String name=console.next();
			Student newStudent=new Student(stuId,name);
			students.put(stuId, newStudent);
			System.out.println("修改成功");
			break;
		}
	}
	
	
	public static void main(String[] args) {
		
		MapTest mt=new MapTest();
		
		mt.testPut();
		mt.testKeySet();
//		mt.testRemove();
//		mt.testEntrySet();
		mt.testModify();
		mt.testEntrySet();
	}

}




1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:789次
    • 积分:161
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档